2010-07-19 76 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') 
相关问题