2014-07-03 45 views
1
   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有效。所以如果表存在不插入。Mysql创建表并同时插入

+0

'VALUES('0','0')'因为它们是VARCHAR - Plus,'$ id'是从哪里来的? –

+0

$ id是来自程序的另一部分,它看起来像这样“76561197961581096” –

+0

好的。那么你还是需要使用'VALUES('0','0'),因为'start'和'end'是VARCHAR。 –

回答

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的变化,从 5.1.51开始。

以前,对于CREATE TABLE IF NOT EXISTS ... SELECT,MySQL生成 警告表存在,但插入行并将 语句写入二进制日志。相比之下,CREATE TABLE ... SELECT(没有IF NOT EXISTS)失败并出现错误,但MySQL 未插入行,也未将语句写入二进制日志。

MySQL现在以相同的方式处理两个语句,当目标表 表存在时,这两个语句都插入行或将其写入 二进制日志。它们之间的区别在于,当IF NOT EXISTS存在时,MySQL产生一个 警告,当它不存在时会产生一个错误。

对于前面的示例,此更改意味着CREATE TABLE IF NOT EXISTS ... SELECT语句从MySQL 5.5.6开始并没有将任何内容插入到目标 表中。