【发布时间】:2008-11-14 22:01:06
【问题描述】:
仅使用严格的 SQL(没有 PHP 或其他任何东西),是否可以创建一个表并在该表不存在的情况下将默认数据插入该表?
【问题讨论】:
-
如果表存在,重要的部分什么都没有完成了吗?
仅使用严格的 SQL(没有 PHP 或其他任何东西),是否可以创建一个表并在该表不存在的情况下将默认数据插入该表?
【问题讨论】:
使用 CREATE TABLE ... SELECT 格式:
如果不存在则创建表 tablename as 从默认数据中选择 *;
【讨论】:
这是一种方法:
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 扩展,可以插入、删除和插入。
【讨论】:
您可以在其中一个元数据表上进行选择
if(not exists select * from whatever_meta where table_name = "whatever)
begin
...
end
你必须做一些研究才能弄清楚到底是怎么...
【讨论】:
能否将表状态存储为变量,然后使用该变量来判断是否插入数据?例如:
@status = SHOW TABLES LIKE 'my_table';
INSERT INTO my_table VALUES (1,'hello'),(2,'world') WHERE @status <> false;
Paul Morgan 的答案的问题在于它期望数据已经存在于另一个表中。 Jonas 的回答将是极其详尽的资源,特别是如果有很多 REPLACES(如果表存在,则这是不必要的)。
【讨论】:
可能是我错过了重点,但为什么默认数据不能是一组插入语句......而只需要做的就是创建表,如果它不存在,然后是插入语句......这样默认数据就不必存在于不同的表中。
【讨论】: