MySQL 仅在表不存在时插入数据

Posted

技术标签:

【中文标题】MySQL 仅在表不存在时插入数据【英文标题】:MySQL inserting data only if table doesn't exist 【发布时间】:2008-11-14 22:01:06 【问题描述】:

仅使用严格的 SQL(没有 php 或其他任何东西),是否可以创建一个表并在该表不存在的情况下将默认数据插入该表

【问题讨论】:

如果表存在,重要的部分什么都没有完成了吗? 【参考方案1】:

使用 CREATE TABLE ... SELECT 格式:

如果不存在则创建表 tablename as
从默认数据中选择 *;

【讨论】:

【参考方案2】:

这是一种方法:

CREATE TABLE IF NOT EXISTS T (
  ID int(10) unsigned NOT NULL primary key,
  NAME varchar(255) NOT NULL
);

REPLACE INTO T SELECT 1, 'John Doe';
REPLACE INTO T SELECT 2, 'Jane Doe';

REPLACE 是对 SQL 标准的 mysql 扩展,可以插入、删除和插入。

【讨论】:

【参考方案3】:

您可以在其中一个元数据表上进行选择

if(not exists select * from whatever_meta where table_name = "whatever)
begin
   ...
end

你必须做一些研究才能弄清楚到底是怎么...

【讨论】:

【参考方案4】:

能否将表状态存储为变量,然后使用该变量来判断是否插入数据?例如:

@status = SHOW TABLES LIKE 'my_table';
INSERT INTO my_table VALUES (1,'hello'),(2,'world') WHERE @status <> false;

Paul Morgan 的答案的问题在于它期望数据已经存在于另一个表中。 Jonas 的回答将是极其详尽的资源,特别是如果有很多 REPLACES(如果表存在,则这是不必要的)。

【讨论】:

【参考方案5】:

可能是我错过了重点,但为什么默认数据不能是一组插入语句......而只需要做的就是创建表,如果它不存在,然后是插入语句......这样默认数据就不必存在于不同的表中。

【讨论】:

根据条件,您最终可能会将垃圾数据添加到生产表中。

以上是关于MySQL 仅在表不存在时插入数据的主要内容,如果未能解决你的问题,请参考以下文章

H2仅在不存在时插入行

插入表,如果表不存在,则创建表然后插入

mysql插入数据时,判断是不是存在,存在则替代,不存在则直接插入,需要能够批量处理。

JDBC 声明表不存在

关于向mysql数据库中插入数据时,判断是不是进行插入的问题

如果不存在则插入数据的过程pl sql