索引:
索引是一种在某种条件下的加速查询的结构。一般的查询都是顺序扫描所有的行。如果表很大,查询很频繁,那么一般的查询就很臃肿。SQLite利用B-tree做索引。索引增加了数据库的大小,在建立索引的情况下,最坏的情况就是表的内容翻倍,索引的维护也比较麻烦。修改表的时候,索引也是要修改的。
索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。实际上,在SQLite中并没有这样的说法。因为SQLite本来就在这方面不完善。这和一般的数据库是不一样的。
create index [ unique ] index_name on table_name (columns) . 其中,unique约束不仅适用于索引,也适用于索引所限制的字段。
drop index index_name.
例子:
唯一性约束也可存在于联合字段。
现在能插入相同的数据了,因为索引被移除了。这里,有排序规则的应用。
排序规则:索引中的每个字段都有相应的排序规则。如果要创建大小写不敏感的索引,这样:
列出索引和其他信息:
使用索引:
首先要明白在什么时候使用索引是好的,什么时候使用是不好的。将在where子句中出现的表达式,SQLite将使用单个字段索引:
column { = | > |>=| <= | < } expression
expression { = | > |>=| <= | < } column
column in (espression _list )
column in ( subquery ) ;
触发器:
当具体的表发生特定的事件时,触发器执行相应的操作。
create [temp | temporary ] trigger trigger_name
[ before | after ] [insert | delete | update | update of columns ] on table_name
action
触发器是通过行为、名称、表定义的。行为通过sql语言构成,当某些事件发生时,触发器负责启动这些命令。通过关键则before或者after来确定是在事件发生前还是后来执行这些操作。事件包含insert、delete等命令。触发器可以有自定义完整性约束、日志改变、更新表和其他的一些事情。作用只是限制在所写的SQL命令。
这里出现了点问题。触发器执行后,不知道为什么没有改变表foods的内容。
错误处理:定义为事件发生前的触发器有机会阻止事件的发生,也可以检查事件的发生。before和after触发器可以帮助实施新的完整性约束。SQLite触发器允许调用raise()函数允许在触发器内产生错误。
raise()定义如下:raise(resolution,error_message);
resolution 可以是:abort、 fail、 ignore、rollback等。
可更新的视图:
创建了一个连接foods和foods_types的视图,通过外键关系相连(有别名的应用):
更新数据库表的时候,这里表示foods和foods_types,触发器自动执行:
事件后,注意回滚,如果没有回滚检查是不是先前没有输begin;
可以看出,在update表格之后,name发生了变化,这是,因为没有提交,注意提交了就不能回滚了。如果,想恢复原来表格的内容,可以利用回滚rollback命令,这样就恢复了。
接下来,将进行事务的学习和理解。事务是数据库的一个很好的东东,用好了有好多的好处。