高级sql:
插入记录:insert into table_name(column_name) values (value_list) ;
其中,column_name是用逗号隔开的字段,value_name是用逗号隔开的即将插入的数据。
比如:
这里,注意id是主键,插入的时候,只管插入type_id 和name,id是自动生成的;当然也可以这样写:insert into foods values (null , 2 , ‘糖葫芦’),已经验证,这样写是可以的。
这是插入一组值的写法:
这是查询结果:
插入多行:
,你会发现,foods2的字段、内容和foods是一样的。
创建和原来表一样的表的方式,也即插入方式,也是最快捷的:
创建临时表时,可以将选择和插入并成一步:
更新记录:
语法:updatetable_name setupdate_list where predicate ;
删除记录:
delete from table_name where predicate ;
实体完整性:
用于定义和保护表内部和表之间的数据关系。一般有四种完整性:实体完整性(涉及表中的行)、域完整性( 涉及控制字段内的值 )、应用完整性(涉及表之间的行,即外键关系)、用户自定义完整性(比较复杂)。
首先来看约束的种类:
字段级的约束:not null , unique , primary key , foreign key , check , collate 。
表一级的约束: primary key , unique , check 。
(1),实体完整性:
数据库的所有的域都是唯一的、可定位的,域可寻址,则行是可寻址的,行在某种方式上是唯一的,主键来完成这样的功能。主键行要求在某种方式上,与表中的其他行是不同的。这样表中的数据基本上就是有组织的。
唯一性约束:unique,也是主键的基础。一个值或者一个字段的值都是不同的。
主键约束:在sqlite中,定义一个表时则定义一个主键。其实,表里总有一个字段是主键,不管你有没有定义主键,这个字段是一个64为的整型字段,rowid(),也即_rowid_,oid,其魔女工人取值按照增序则自动生成。主键在sqlite里具有自动增长机制。如果你定义了主键,那么定义的新的主键将会取代rowid()字段,不一定按照严格的顺序增长。当达到最大的值时,sqlite将要自动搜索还未使用的值,并且作为将要插入的值,如果要从表中删除记录,那么rowid()将会被回收在后面的插入中使用。
如果要sqlite使用唯一的自动主键值,而不是填补空白,那么可以在主键定义关键字integer primary key 中加入autoincrement。这样,sqlite使用不同的主键生成算法,该算法可能会阻止rowid 的回收,为insert 产生新的非回收rowid,创建表的时候,如果字段包含autoincrement约束,那么sqlite会在一个名为sqlite_sequence的系统表中记录该字段的最大值。在后面的insert语句中,只是使用比该最大值大的,如果达到了绝对最大值,sqlite会在后面的insert语句中返回sqlite_full。
注意,id超过了最大值了,所以就返回了一个错误。其实,可以将自增长字段作为整型主键,鼓励这样做。
主键约束可以定义在多个字段中,不一定用整型:
建议在合适的地方适用实际字段作为主键。
原文链接:https://www.f2er.com/sqlite/201787.html