《sqlite权威指南》读书笔记(二)

插入纪录

INSERT INTO table_name (column_list) VALUES (value_list);


插入一行例句

INSERT INTO foods (name, type_id) VALUES ('Cinnamon Bobka',1);

column_list 中可以包含主键字段,但要保证插入的主键字段的唯一性,否则会报“PRIMARY KEY must be unique”

last_insert_rowid();函数返回最后一个增长值。

插入一组行例句

INSERT INTO foods

SELECT NULL, type_id, name FROM foods where name = 'Choco';
插入多行例句

CREATE TABLE foods2 AS SELECT * FROM FOODS;


更新数据

UPDATE table_name SET update_list WHERE predicate;

例如:

update foods set name = 'apple',food_types = 3 where name =='banana';


删除数据

DELETE FROM table_name WHERE predicate;

例如:

delete from foods where id > 500;


数据完整性

域完整性 实体完整性 引用完整性 用户定义完整性


实体完整性 

主键由至少带有unique约束的一个或一组字段组成。

唯一性约束 -- unique

主键

如果未定义,则系统自动定义。为64bit的整形字段,名为rowid,也叫做_rowid,oid。sqlite为主键字段提供自增长性质。如果定义字段类型为 integer primary key,sqlite将为该字段创建默认值,并确保其唯一性。实际上,该字段就是rowid的别名。最大值为2的64次方,当达到最大值时,会搜索未使用的值。所以,新创建的rowid并不总是递增的。

autoincrement 会组织sqlite回收主键,并在达到最大值时停止。

主键即使不使用整型值,系统也会在内部维护一个rowid字段。

例如:

sqlite> create table pkey(x text, y text, primary key(x,y));
sqlite> insert into pkey values('x','y');
sqlite> insert into pkey values('x','x');
sqlite> select rowid, x, y from pkey;

rowid|x|y
1|x|y
2|x|x


域完整性

默认值(default)

如果用insert语句插入记录时没有为该字段制定值,关键字default将为字段提供一个默认值。

是处理非null的一种策略。

格式为 default 值

例如 name not null default NUKNOW 插入语句为指定name字段的值时,会自动用‘NUKNOW’当做name的值。

另外,default 接受三种预定义的保留字,为 current_time,current_data,curremt_timestamp


NOT NULL 约束

遇见null值会报错。


check 约束

可以定义表达式来判断值,例如: check(old > 0) 表示年龄必须大于0,插入-1岁会报错。


外键约束

语法如下

create table table_name

( column_definition references foreign_table (column_name)

  on {delete | update} integrity_action

  [not] deferrable [initially {deferred|immediate},]

);


排序规则

关键字为:collate

collate nocase 大小写不敏感 a==A


储存类

sqlite有5个原始的数据类型,被称作储存类。

integer 整数                   没有小数点被指派为该值。

real 实数                        有小数点。。。。

text 文本                         有引号括住。。。。

blob 二进制大对象         x‘abcd’。。。。

NULL 表示没有值          用NULL说明的值。。。

typeof()返回值的类型。

一个字段可以有不同的数据类型

排序规则如下

blob > text > integer real (通过值的大小排序) > NULL


视图

下面是一篇关于视图的介绍性文章

视图的介绍

定义视图语法如下:

create view name as select-stmt;

删除视图的语法如下:

drop view name;


索引

创建索引语法: 

create index [unique] index_name on table_name(columns);

删除索引:

drop index index_name;

索引的排序规则

创建语法:

create index foods_name_idx on foods (name collate nocase);


触发器

语法:

create [temp|temporary] trigger name

[before|after] [insert|delete|update|update of columns] on table

action

可以使用触发器在sqlite中实现可更新的视图


事务

事务由3个命令控制 :begin  commit  rollback

begin 开始一个事务,连接结束前,未发出commit,则全部命令撤销,rollback还原begin之后的所有操作。

savepoint xxx 保存一个位置,rollback to xxx,返回到某位置


数据库锁

sqlite有五种不同的锁状态 :未加锁 共享 预留 未决 排他


事务类型

sqlite有三种不同的失误类型,为了避免死锁,因为sqlite一个时刻允许多个连接读取数据,却只允许一个连接写数据。

begin[deferred | immediate | exclusive] transaction;

基本准则:如果使用的数据库没有其他连接,用begin就够了,但数据库如果有其他会对数据库执行写操作的连接,就应该使用begin immediate或 begin exclusive


数据库管理

附加数据库

attach [database] filename as database_name;

分离数据库

detach [database] database_name;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值