插入纪录
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;