Mysql同时创建表并插入

时间:2014-07-03 19:16:41

标签: php mysql

                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有效。因此,如果表存在,也不要插入。

1 个答案:

答案 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起。