sql - 如果表不存在,是否可以构建 SQL 查询以自动创建表?

标签 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;

这是让我无法理解的花哨组合:)

最佳答案

要创建一个不存在的表,可以使用IF NOT EXISTS :

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

对于第二部分,您可以使用 INSERT OR IGNORE ( more info here ) 插入一个值,假设您有一个唯一约束,否则会通过两次插入该值而被违反(例如,您的 key 列上可能有一个 unqiue 约束):

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

关于sql - 如果表不存在,是否可以构建 SQL 查询以自动创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278712/

相关文章:

iphone - sqlite iPhone中的数据库被锁定错误

mysql - 我正在努力在一个简单的查询中输出正确的 SQL 代码

mysql - SQL查询帮助: update table values with data from two other tables

php - 简单的 Where 子句有语法错误

android - 如何使用一个选择列查询多个选择参数

sql - 从包含 "Winners"和 "Losers"的表中获取获胜百分比

java - 内存不足错误: Failed to allocate a 82956 byte allocation with 30836 free bytes and 30KB until OOM?

php - 如何根据 php 中的数据库字段值对日期进行分组

sql - 从 EC2 迁移到 RDS 后,Postgresql 查询速度降低 10 倍

python - 错误 : parameters are of unsupported type By scrapy sql insert