2013-08-12 152 views
2

我需要將多個記錄添加到mysql數據庫。我嘗試了多個查詢,它的工作正常,但效率不高。所以我試着用下面這樣一個查詢,插入更新多行mysql

INSERT INTO data (block, length, width, rows) VALUES 
    ("BlockA", "200", "10", "20"), 
    ("BlockB", "330", "8", "24"), 
    ("BlockC", "430", "7", "36") 
ON DUPLICATE KEY UPDATE 
    block=VALUES(block), 
    length=VALUES(length), 
    width=VALUES(width), 
    rows=VALUES(rows) 

但它總是更新表(列是block_id,塊,長度,寬度,行)。 我是否應該對查詢進行任何更改,同時還要添加block_idblock_id是主鍵。任何幫助,將不勝感激。

+0

什麼是「數據」表的鑰匙? – DavidLin

+0

帖子已更新(block_id是主鍵) – Irawana

+0

我已經運行你的查詢沒有任何問題,你確定你沒有其他的數據表定義的鍵嗎?還要確保你爲ID字段設置了'自動增量' – DavidLin

回答

1

我已經運行你的查詢沒有任何問題,你確定你沒有其他數據表定義的鍵?並且確保你爲ID字段設置了「自動增加」。沒有AUTO_INCREMENT,查詢隨時更新現有的行

** * ** 更新 ** * ** * ****

對不起我我錯了你的問題。是的,只有一個auto_increment鍵,你查詢將總是插入新的行而不是更新現有的行(因爲主鍵是檢測'現有'/重複的唯一方法),因爲鍵是auto_increment,所以如果主鍵不在插入查詢中給出。

我想你想達到什麼不同,你可能要建立在各個領域的複合唯一鍵(即塊,現場,寬度,行)

順便說一句,我已經設置了一個SQL爲你提供。 http://sqlfiddle.com/#!2/e7216/1

添加唯一鍵的語法:

CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`block` varchar(10) DEFAULT NULL, 
`length` int(11) DEFAULT NULL, 
`width` int(11) DEFAULT NULL, 
`rows` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `uniqueme` (`block`,`length`,`width`,`rows`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 
+0

block_id是唯一的id。也是它的自動增量。當我再次運行此查詢時,它再次添​​加這些數據而不是更新。 – Irawana