NO IMAGE

sqlite的內建表sqlite_master

概述

每一個sqlite資料庫都有一個名為sqlite_master的系統表。sqlite_master表中儲存當前資料庫中所有的表的的相關資訊,表的名稱、用於建立此表的sql語句、索引、索引所屬的表、建立索引的sql語句等。

sqlite_master表是隻讀的,只能對他進行讀操作,不能對它使用 update、insert或 delete。 它會被 creat table、creat index、drop table和 dorp index 等命令自動更新。

sqlite_master表的結構:

  CREATE TABLE sqlite_master (   
type TEXT,   
name TEXT,   
tbl_name TEXT,   
rootpage INTEGER,   
sql TEXT   
);   

對於表來說,type 欄位永遠是 ‘table’,name 欄位永遠是表的名字。所以,要獲得資料庫中所有表的列表, 使用下列select語句:

select name from sqlite_master 
where type=’table’ 
order by name; 

對於索引,type 等於 ‘index’, name 則是索引的名字,tbl_name 是該索引所屬的表的名字。 不管是表還是索引,sql 欄位是原先用 creat table或 creat index語句建立它們時的命令文字。對於自動建立的索引(用來實現 PRIMARY KEY 或 UNIQUE 約束),sql欄位為NULL。

如果我們想知道當前資料庫一共有多少表格和索引可以使用如下語句

select count(*) from sqlite_master

sqlite_temp_master

臨時表格不存在於sqlite_master 中,而是存在於sqlite_temp_master中

sqlite_temp_master 表的結構跟sqlite_master一樣,這裡就不多講了!

有不同見解的同志,歡迎留言交流~