是否可以构造SQL查询以自动创建表(如果它尚不存在)?

时间:2010-07-19 05:46:34

标签: sql sqlite

我是一个完整的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;

这是我想到的奇特组合:)

3 个答案:

答案 0 :(得分: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")

答案 1 :(得分:2)

您可以使用CREATE TABLE IF NOT EXISTS ...

看看这里:

http://cookbooks.adobe.com/post_Easy_way_to_create_a_SQLite_connection-12846.html

您还可以使用本页末尾显示的内容:

http://php.net/manual/en/book.sqlite.php

答案 2 :(得分:1)

此外,您可以在CONSTRAINT子句中为每列指定默认值。

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