MySQL创建表如果不存在,并仅在创建了表后插入记录。

3

如果表格是新建的,我需要创建一个表格并插入第一条记录。

我使用以下语句创建表格:

CREATE TABLE IF NOT EXISTS tableName (
    id int(9) NOT NULL, 
    col1 int(9) DEFAULT NULL, 
    col2 int(3) unsigned zerofill DEFAULT NULL,
    PRIMARY KEY(id)
)  ENGINE = InnoDB DEFAULT CHARSET = latin1;

如果表刚刚创建,我该如何插入第一条记录?


定义“刚创建”。这里究竟是什么意思,我们如何知道表是否刚被创建? - Tim Biegeleisen
@Barmar 是的,这对我也适用。 - raven_977
然后看看Barmar的答案,或者你也可以在创建表语句之后插入一个语句,但将它们放入单个事务中。 - Tim Biegeleisen
无论是手动还是代码决定创建表。那么添加插入的问题在哪里? - P.Salmon
@P.Salmon 数据库会根据 IF NOT EXISTS 子句来决定是否创建表。 - Barmar
显示剩余7条评论
2个回答

9

将创建和插入合并为一个语句:

CREATE TABLE IF NOT EXISTS tableName (
    id int(9) NOT NULL, 
    col1 int(9) DEFAULT NULL, 
    col2 int(3) unsigned zerofill DEFAULT NULL,
    PRIMARY KEY(id)
)  ENGINE = InnoDB DEFAULT CHARSET = latin1
AS SELECT 1 AS id, 10 AS col1, 5 AS col2;

如果它没有创建表格,AS SELECT ...子句将被忽略。

这将为1、10和5创建新列。如果这些值已经存在于id、col1和col2的现有列中,那就太完美了。 - raven_977
将别名添加到 SELECT 子句中可以解决此问题。 - Barmar

4
那是一个很好的使用INSERT IGNORE命令而不是INSERT命令的位置。
INSERT IGNORE INTO mytable (id, field1, field2) VALUES(1, 'foo', 'bar');

来自mysql文档

执行INSERT语句时发生的错误会被忽略。例如,如果没有使用IGNORE,表中出现重复的UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,从而中止语句的执行。使用IGNORE后,该行将被丢弃,不会发生错误。被忽略的错误会生成警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接