搜索
您的当前位置:首页正文

SQLITE中的填空判断知识点

来源:筏尚旅游网
在SQLite中创建表时,关系模型的参照完整性在create table语句中用 references 命令短语指明这些外码参照哪些表的主码。

在SQLite中,false可以由数字0代替,true可以由其他的非0值代替。

在SQL查询语句中,where子句过滤行(选择),select子句过滤列(投影)。

在SQL查询语句中,select子句后的星号(*)表示所有列。

在SQL查询语句中,除必须提供select子句外,所有子句都是可选的。

在SQL查询语句中,任何select语句的输出都可以作为另一个语句的输入。

SQLite支持ANSI SQL中除right outer join和full outer join之外的所有操作,而这两个操作也可以由其他基本的关系操作完成。

在关系运算中,交运算属于附加运算,可以由基本关系运算组成。

SQLite数据库包含在单个操作系统文件中,因此在备份文件时,可以通过复制该文件完成。

在对SQLite数据库进行长期备份时,最好转储为SQL格式,这样可以实现在各种不同的SQLite版本中加以恢复,即备份为SQL格式,可以增强数据库文件的可移植性。

在SQLite中,单独的1个字段可以存储不同存储类的值,而且不同存储类的值可以通过它们各自类的“类值”进行排序。SQLite的排序规则是:1)NULL存储类具有最低级的类值。NULL值之间没有大小值的区分。2)integer或real存储类值高于NULL,二者的排序级别相等。两种类型的数据通过数值大小进行比较。3)text存储类的值比integer和real高。4)blob存储类是最高级别的类。

SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型。

虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。

SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。

有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。

SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。也就是说,SQLite3中的类型是一种弱类型的概念,字段类型形同虚设,存储什么数据都是可以的。

在SQLite中,创建表时主键可以使用自动增长类型,例如:id INTEGER PRIMARY KEY AUTOINCREMENT

视图是一种虚拟表,其数据来源于其他基本表或视图。视图的数据是在使用过程中临时生成的。

SQLite的视图是只读,不可更新。为使视图可更新,可创建负责处理视图上更新事件的触发器。SQLite创建视图触发器时,可使用instead of 替代触发器。

触发器(Trigger)是用户定义在基本表或视图上的一类由事件驱动的特殊过程。触发器由服务器自动激活,可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

索引是一种用来在某种条件下加速查询的结构。但索引会增加数据库的大小,并且可能会降低insert、update和类似操作的速度。因为在对数据表进行增删改操作时,除了修改表,与表相关的索引也将同时被修改,势必会增加修改表的时间。

SQLite中索引采用B-tree实现。索引是关系数据库的内部实现技术,属于内模式的范畴。

.indices foods的功能是列出foods表中的索引。

在SQLite中,索引只能在主数据库表上创建,不能在附加的数据库中的表上创建。

SQLite只能将vacuum作用于数据库,无法再精确到数据库中指定的数据表或者索引。 当某个数据库中的一个或多个数据表存在大量的插入、更新和删除等操作时,将会有大量的磁盘空间被已删除的数据所占用,在没有执行VACUUM命令之前,SQLite并没有将它们归还于操作系统。由于该类数据表中的数据存储非常分散,因此在查询时,无法得到更好的批量IO读取效果,从而影响了查询效率。

在SQLite中,仅支持清理当前连接中的主数据库,而不能清理其它Attached数据库。 VACUUM命令在完成数据清理时,创建一个和当前数据库文件相同大小的新数据库文件,之后再将该数据库文件中的数据有组织的导入到新文件中,其中已经删除的数据块将不会被导入,在完成导入后,收缩新数据库文件的尺寸到适当的大小。

事务是一个数据库操作序列,是一个不可分割的工作单位,是并发控制的基本单位。

在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序,通常一个程序会包含多个事务。

事务的ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability )

1)原子性:事务中包括的所有操作要么都做,要么都不做

2)一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态 3)隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的 4)持续性:事务一旦提交,对数据库的改变是永久的

事务由 3 个命令控制:BEGIN、COMMIT 和 ROLLBACK。 BEGIN 开始一个事务,之后的所有操作都可以取消。 COMMIT 使 BEGIN 后的所有命令得到确认; ROLLBACK 撤消BEGIN 之后的所有操作。

SQLite 默认情况下,每条 SQL 语句自成事务,这是一种隐式事务,也称为自动提交模式。条成功完成的SQL语句都自动提交,同理,每条遇到错误的语句都回滚。

冲突解决策略既可在SQL 的DML语句中指定,也可在表及索引的DDL语句中指定,即在:insert、update、create table、create index中均可指定。

SQLite中,另外的一种模式就是WAL机制,WAL(write ahead log)就是对redo日志机制的一种实现。简单来说就是把想对数据库进行操作的动作先都写到日志里面,然后对DB进行操作,操作完后,只把日志立即刷新到磁盘中,而不必立即将DB在内存中的数据刷新到磁盘里面,这样,相对与undo日志机制,redo机制就使得IO操作在系统的安排下进行(比如缓冲区替换等等),而不需要立即进行IO操作。

SQLite采用粗放型的锁。当一个连接要写数据库,所有其它的连接被锁住,直到写连接结束了它的事务。SQLite有一个加锁表,来帮助不同的写数据库都能够在最后一刻再加锁,以保证最大的并发性。

SQLite有5个不同的锁状态:未加锁(UNLOCKED)、共享(SHARED)、保留(RESERVED)、未决(PENDING)、排它(EXCLUSIVE)。

每个数据库连接在同一时刻只能处于其中一个状态。每种状态(未加锁状态除外)都有一种锁与之对应。

SQLite数据库默认的锁状态是未加锁状态Unlocked。

为了能够从数据库中读出数据(不写),连接必须首先进入共享状态,也就是说首先要获得一个共享锁Shared。多个连接可以同时获得并保持共享锁,也就是说多个连接可以同时从同一个数据库中读数据。但哪怕只有一个共享锁还没有释放,就不允许任何连接写数据库。

如果一个连接想要写数据库,它必须首先获得一个保留锁Preserved。一个数据库上同时只能有一个保留锁。保留锁可以与共享锁共存,保留锁是写数据库的第1阶段。保留锁即不阻止其它拥有共享锁的连接继续读数据库,也不阻止其它连接获得新的共享锁。

当数据库处于未决锁状态Pending时,想要写数据库的操作,必须等待该数据库中已经存在的共享锁释放,与此同时,新的读操作产生的共享锁申请将不再被允许。

在执行写操作之前,该进程必须先获取该数据库的排他锁Exclusive。然而一旦拥有了排他锁,任何其它锁类型都不能与之共存。因此,为了最大化并发效率,SQLite将会最小化排他锁被持有的时间总量。

SQLite有三种不同的事务类型,它们以不同的锁状态启动事务。三种事务类型为:deferred、immediate或exclusive。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top