学习使用SQLite(版本3.7.4)(中F)

来源:互联网 发布:sql最大值函数 编辑:程序博客网 时间:2024/05/17 22:28

高级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是一样的。

 

   创建和原来表一样的表的方式,也即插入方式,也是最快捷的:

   

 

 创建临时表时,可以将选择和插入并成一步:

   

   

 

    更新记录:

    语法:update  table_name   set   update_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超过了最大值了,所以就返回了一个错误。其实,可以将自增长字段作为整型主键,鼓励这样做。

     那么,我们也可以看见sqlite_sequence的用法:

         

         主键约束可以定义在多个字段中,不一定用整型:

              建议在合适的地方适用实际字段作为主键。