2014-07-03 81 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開始並沒有將任何內容插入到目標 表中。