索引:
索引是一種在某種條件下的加速查詢的結構。一般的查詢都是順序掃描所有的行。如果表很大,查詢很頻繁,那麼一般的查詢就很臃腫。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命令,這樣就恢複了。
接下來,將進行事務的學習和理解。事務是資料庫的一個很好的東東,用好了有好多的好處。