CREATE TABLE IF NOT EXISTS `$id` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start` varchar(10) NOT NULL,
`end` varchar(10) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=45 ;
INSERT INTO `$id`(`start`, `end`) VALUES ('0','0')
我一直试图弄清楚如何将这两个Mysql(请求(?))绑定到一个没有成功。基本上我希望它工作,所以当我创建表时,它还应该将值0和0添加到“开始”和“结束”行。但我仍然希望“如果不存在则创建表”对INSERT INTO有效。因此,如果表存在,也不要插入。
答案 0 :(得分:0)
你可以用以下单一陈述来做到这一点:
CREATE TABLE IF NOT EXISTS `$id` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`start` VARCHAR(10) NOT NULL,
`end` VARCHAR(10) NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB
SELECT '0' AS `start`, '0' AS `end`;
您使用CREATE TABLE ... SELECT
语法而不是从表中选择,而是使用常量值并默认获取自动增量值和current_timestamp。
从MySQL 5.5.6或更新版本开始,请参阅以下摘录自manual, CREATE TABLE ... SELECT:
从MySQL 5.5.6开始,处理CREATE TABLE IF NOT EXISTS ... SELECT 对于目标表已经更改了语句 存在。此更改还涉及从MySQL 5.1开始的更改 51年1月5日
以前,对于CREATE TABLE IF NOT EXISTS ... SELECT,MySQL生成 表存在的警告,但插入行并写入 无论如何,声明到二进制日志。相比之下,CREATE TABLE ...... SELECT(没有IF NOT EXISTS)因错误而失败,但MySQL 没有插入任何行,也没有将语句写入二进制日志。
MySQL现在以相同的方式处理两个语句 表存在,因为两个语句都不插入行或写入 二进制日志。它们之间的区别在于MySQL产生了一个 当IF NOT EXISTS存在时发出警告,如果不存在则发出错误。
对于前面的示例,此更改意味着CREATE TABLE IF NOT EXISTS ... SELECT语句不会在目标中插入任何内容 表格自MySQL 5.5.6起。