2010-07-19 89 views
3

我是一個完整的SQL新手,我試圖完成以下(僞代碼)與一個單一的查詢:是否可以構造一個SQL查詢來自動創建一個表,如果它尚不存在?

if (a table named "config_data" does not exist) 
{ create a table named "config_data" } 

if ("config_data" has no rows) 
{ add a row to "config_data" with some default data } 

return all rows in "config_data" 

我將如何做呢?它可以通過單個查詢完成嗎?我使用SQLite3,如果有幫助。

到目前爲止,我知道如何創建一個表,然後將數據插入到它:

CREATE TABLE config_data (key TEXT NOT NULL, value TEXT); 
INSERT INTO config_data VALUES ("key_1", "value_1"); 
INSERT INTO config_data VALUES ("key_2", "value_2"); 

以及如何中檢索所有行:

SELECT * FROM config_data; 

它避開了我的幻想組合:)

回答

5

要創建一個表,如果它不存在,你可以使用IF NOT EXISTS

CREATE TABLE IF NOT EXISTS config_data (
    key TEXT NOT NULL, value TEXT, 
    CONSTRAINT key_unique UNIQUE(key) 
) 

關於你的第二部分,你可以使用INSERT OR IGNOREmore info here)插入值,假設你有一個獨特的約束,否則將通過插入原來的兩倍,被侵犯(例如,你可能對你的key列unqiue約束):

INSERT OR IGNORE INTO config_data VALUES ("key_1", "def_value_1") 
+0

此外,您可以在CONSTRAINT子句中爲每列指定默認值。 CREATE TABLE IF NOT EXISTS config_data('someinteger'INTEGER,'sometext'TEXT,CONSTRAINT sometext DEFAULT'should text,but not yet') – user106514 2010-07-19 14:13:57

1

此外,您還可以在CONSTRAINT子句中爲每列指定一個默認值。

CREATE TABLE IF NOT EXISTS config_data 
('someinteger' INTEGER, 'sometext' TEXT, CONSTRAINT sometext DEFAULT 'should be text but isn't yet') 
相關問題