我有一个表“table1”,我想创建另一个表,但将其存储在内存中 (engine=memory),其中包含来自 table1 的数据。
在我的测试服务器中,SQL 按预期工作 - 创建表一次,将数据从“table1”放入其中,下次跳过插入,因为表“mem_table”已经存在。
在生产服务器中 SQL 是意外的 - 它创建表 'mem_table',从 'table1' 插入数据。每次运行它都会一次又一次地插入数据。
SQL:
CREATE TABLE IF NOT EXISTS `mem_table` (
`f1` mediumint(9) NOT NULL AUTO_INCREMENT,
`f2` mediumint(9) NOT NULL,
`f3` varchar(100) NOT NULL
PRIMARY KEY (`f1`),
KEY `f3` (`f3`)
) ENGINE=MEMORY DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 SELECT NULL f1, f2, f3 FROM table1;
最佳答案
这种行为,如documentation说,是版本相关的。
因此,解决方案不是在 CREATE TABLE 中使用“IF NOT EXISTS”。而如果表存在,mysql只是返回错误,并没有反复插入数据。
CREATE TABLE `mem_table` (
`f1` mediumint(9) NOT NULL AUTO_INCREMENT,
`f2` mediumint(9) NOT NULL,
`f3` varchar(100) NOT NULL
PRIMARY KEY (`f1`),
KEY `f3` (`f3`)
) ENGINE=MEMORY DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 SELECT NULL f1, f2, f3 FROM table1;
关于MySQL:如果不存在则创建表总是附加数据而不是跳过创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328693/