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

事务的类型:

             事务三种不同的类型,以不同的锁状态启动事务。

             在begin命令中指定事务类型:begin  [ deferred |  immediate | exclusive  ]  transaction ;

                 deferred必须到使用是才能获取锁。默认从未锁定状态开始。以deferred开始的事务,是延迟的,停留在未锁定状态。多个连接可以在同时刻未创建任何锁的情况下开始延迟事务。这种情况下,第一个对数据库的读操作获取共享锁,第一个对数据库的写操作获取预留锁。

                 immediate事务在begin的时候就视图获取预留锁。若成功,begin   immediate保证无其他连接写数据库,但是其他连接可以读取数据库。预留锁的另一个结果是没有其他连接能成功启动begin    immediate或者 begin  exclusive命令,当其他连接执行上述命令时,SQLite会返回SQLite_busy错误。这时候可以修改数据库,但不能提交,使用commit时会有SQLite_busy错误。也就是说,还没有读事务完成,得继续等待。

                 exclusive事务会试着获取排他锁,类似于immediate事务,值得注意的是,在获取排他锁后,数据库没其他的活动链接,本连接可以任意读写数据库。

 

数据库管理:

              附加数据库:

              SQLite允许利用attach命令将多个数据库定位”附加“到当前连接上,在全局范围内他的内容都是可取的。

              语法形式: attach  [database]  filename  as  database_name;

              filename是SQLite数据库的文件名和路径,database_name 是要引用的数据库和对象的逻辑名称。主数据库自动赋名为main。如果创建临时对象,SQLite会自动创建一个附加的数据库,并且命名为temp。逻辑名称可以用来引用附加数据库内的对象,于此同时,引用附加数据库的对象必须提供逻辑名。这个在两个数据库中有相同的表的时候,很管用。

               

              使用全名引用数据库中的对象:

             

              分离数据库:

              detach  [database]   database_name;

            

           

             数据库清理:

             命令:reindex(用于重建索引,重建所有使用指定排序名称的索引) 和 vacuum (重构数据库清理未使用的空间 ,开放状态的事务,vacuum是不执行的)。

             reindex的用法:reindex      collation_name;

                                          reindex       table_name |  index_name ;

             vacuum的用法:  VACUUM   [index-or-table-name]

    

    数据库配置:

    SQLite没有配置文件,其所有的配置参数都是利用pragma实现的。这个pragma有着命令和变量的特点。

    编译指示中的常用的内容:

      a,连接缓冲区大小:

        控制一个连接可以在内存中使用多少个数据库页。方式:pragma cache_size;

        注意:可以使用default_cache_size编译指示来默认所有的连接设置永久缓冲区的大小。

        这种设置可以存储于数据库中,只是对以后的连接生效,对当前的连接不起作用。缓冲其实可以在事务为预留锁的时候,存储待定的变

        化。缓冲区大对于获取排他锁之前能做的事情量是有鼓励的。

     b, 获取数据库信息:

        database_list : 获取所有附着的数据库,

         为看的清楚起见,我把临时建立的数据库temp.db附加到test.db上了。

        index_info    : 列举出索引内字段的相关信息。索引名作为参数,

        index_list    : 列出表中的索引信息。表名作为参数。

        table_info    : 列出表中所有字段的相关信息。

        

    c,写同步:

       通常,SQLite会在关键时刻将所有的变化提交到磁盘保证事务的持久性。但是,因为影响性能,可以考虑关闭这个功能。

       编译指示synchronous来实现。该编译指示的三种设置:full ,  normal ,off。

       full:在继续前,在关键点暂停以确保所有的数据实际写入磁盘。确保了即使系统崩溃或者电力中断,重启后数据库依然是未损的。很安全,但慢。

       normal:在大多关键点暂停,但是不太频繁了。某个电力中断可能导致数据库受损。实际中,可能会遭受严重的磁盘操作失败或者其他不课恢复的硬件故障。

       off:将数据抛给OS后立即继续工作。加速50倍左右,但是问题是,如果运行SQLite的应用程序崩溃,数据依然是安全的。如果系统崩溃或者停电,可能会导致数据损毁。

    d,临时存储器:

       保存临时数据(临时的表、索引、其他对象)的地方。

       两个编译指示控制临时存储器:

       temp_store :决定是使用内存还是磁盘作为临时存储器;三个选项:default(使用内编译的默认项),file(使用OS文件),memory

(使用内存);

       temp_store_directory:存储临时文件的目录,但是在file作为存储介质的情况下。

    e,页大小、编码和自动清理:

      必须在创建数据库前设置。

      数据库大小可以通过auto_vacuum自动保持在最小。启动auto_vacuum时,删除的事务提交时,数据库会变小。vacuum对使用auto_vacuum的数据库不起作用。

    f,调试:

      四个调试的编译指示:integrity_check 可查看次序颠倒的记录、缺失、畸形记录、损毁的索引等。如果损毁,返回描述问题的字符串,如正常,返回ok。其他编译指示追踪解析器和虚拟数据库引擎,只要数据库编译时启用了调试信息,就可以启用这些编译指示。

     

系统目录:

     系统表:sqlite_master,包含所有表、视图、索引和触发器的信息。

     

     rootpage指的是对象的第一个B-tree页面在数据库文件中的位置。

    

查看查询计划:

     利用explain query plan查看SQLite执行查询的方法。在此命令后加上查询文本。

     

   

 

 

     ----------------------------over》-------------------------------             

          小记:历时20天,共计21篇。还会在后面继续写,直到深入内核,读懂源码。最后,学习PHP,利用PHP+SQLite+……构架网站,这是后话。源码是目前的重点。

     

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值