sqlite判斷資料表存在用到的Sql語句

2021-05-23 15:56:58 字數 4487 閱讀 4495

sqlite判斷資料表存在用到的sql語句

select count(*)  as cnt fromsqlite_masterwhere type='table' and name='dbinfo' //其中dbinfo為需要判斷的表名。注意大小寫敏感!

[目錄]sql-command

::=create[temp|temporary]table[if not exists]table-name

(

column-def

[,

column-def

]*

[,

constraint

]*

)

sql-command

::=create[temp|temporary]table[database-name

.

]table-name

asselect-statement

column-def

::=name

[type

][[constraintname

]column-constraint

]*type

::=typename

|

typename

(

number

)

|

typename

(

number

,

number

)

column-constraint

::=not null[conflict-clause

]|

primary key[sort-order

][conflict-clause

][autoincrement]|

unique[conflict-clause

]|

check (

expr

)

|

defaultvalue

|

collatecollation-name

constraint

::=primary key (

column-list

)

[conflict-clause

]|

unique (

column-list

)

[conflict-clause

]|

check (

expr

)

conflict-clause

::=on conflictconflict-algorithm

create table語句基本上就是"create table"關鍵字後跟乙個新的表名以及括號內的一堆 定義和約束。 表名可以是字串或者識別符號。以"sqlite_"開頭的表名是留給資料庫引擎使用的。

每個欄位的定義是欄位名後跟字段的資料型別,接著是乙個或多個的字段約束。欄位的 資料型別並不限制 欄位中可以存放的資料。可以檢視sqlite3的資料型別

獲取 更多資訊。 unique約束為指定的字段建立索引,該索引須含有唯一鍵。collate子句說明在比較欄位的 文字記錄時所使用的排序函式

。預設使用內嵌的binary排序函式。

default約束說明在使用insert插入欄位時所使用的預設值。 該值可以是null,字串常量或乙個數。從3.1.0版開始,預設值也可以是以下特殊的與事件無關的關鍵字current_time, current_date或current_timestamp.若預設值為null,字串常量或數,在執行未指明字段值的insert語句的時候它被 插入字段。 若預設值是current_time, current_date或current_timestamp,則當前utc日期和/或時間被插入字段。current_time的 格式為hh:mm:ss,current_date為yyyy-mm-dd,而current_timestamp是"yyyy-mm-dd hh:mm:ss".

正常情況下定義primary key只是在相應欄位上建立乙個unique索引。然而,若主鍵定義在單一的integer型別的字段上, 則該字段在內部被用作表的b-tree鍵。這即是說字段僅能容納唯一整數值。(在除此之外的其它情況下,sqlite忽略資料型別的說明 ,允許任何型別的資料放入欄位中,不管該字段被宣告為什麼資料型別。) 若乙個表中不含乙個integer primary key欄位,則b-tree鍵 為自動產生的整數。一行的b-tree鍵可以通過如下特殊的名字"rowid", "oid", 或 "_rowid_" 進行訪問,不論是否有integer primary key存在。integer primary key欄位可以使用關鍵字autoincrement宣告。autoincrement關鍵字修改了b-tree鍵自動產生的方式。b-tree鍵的生成 的其它資訊可以在這裡 找到。

若"temp"或"temporary"關鍵字出現在"create"和"table"之間,則所建立的表僅在當前資料庫連線可見,並在斷開連線時自動被刪除。在臨時表上建立的任何索引也是臨時的。臨時表和索引單獨儲存在與主資料庫檔案不同的檔案中。

若說明了,則表在該資料庫中被建立。同時宣告和temp關鍵字會出錯,除非 是"temp".若不宣告資料庫名,也不使用temp關鍵字,則表建立於主資料庫中。

在每個約束後跟可選的on conflict子句可以定義替代的約束衝突判定演算法。 預設為abort。同乙個表中的不同約束可以使用不同的預設衝突判定演算法。若一條copy, insert, 或 update 命令指定了不同的衝突判定演算法,則該演算法將替代create table語句中說明的預設演算法。 更多資訊,參見on conflict

.3.3.0版支援check約束。在3.3.0之前,check約束被解析但不執行。

表中的字段數或約束數沒有任何限制。在2.8版中,單行資料的總數被限制為小於1 megabytes。而在3.0中則消除了限制。

create table as形式定義表為乙個查詢的結果集。表的欄位名字即是結果中的欄位名字。

每條create table語句的文字都儲存在sqlite_master表中。每當資料庫被開啟,所有的create table語句從sqlite_master表中讀出,構成表結構的sqlite內部實現。若原始命令為create table as則合成出等效的 create table語句並儲存於sqlite_master表中代替原命令。create temporary table語句文字儲存於sqlite_temp_master表中。

若在命令中使用可選的if not exists子句且存在同名的另乙個表,則當前的命令無效。

刪除表可以使用drop table

語句。

SQL判斷資料表是否存在

最近重新做開發,又自己動手寫了sql語句,所以把一些東西記錄到這裡,為了加深印象,大家一起交流。假設有一張表,名為 personale if exists select from sysobjects where object id n personale and objectproperty id...

Sqlite 判斷表是否存在

最近的專案有在vc環境下使用sqlite,常常在建立表之前需要知道這個表是否存在。一開始用create table if not exists 這條sql語句,但是會報出錯誤提示 sqlite misuse 這種方法行不通,只好自己寫個函式判斷表是否存在。思路是寫乙個查詢語句,接著判斷列的個數,如果...

ADO方式下判斷資料表是否存在

檢視 大字型 中字型 小字型 前段時間做乙個管理系統的時候,乙個朋友問我不用資料庫,用excel可以做不,當時在做的過程中出了一一些的問題,就想現在說到的這樣,我在判斷資料是否存在的時候有一些問題,現在在網上找了點資料,整理後貼在這裡.下面構造兩個可過載的函式,用於在ado方式下判斷資料庫的資料表是...