我正在嘗試重複行在同一個表中。表A有沒有auto_increment(不幸)。重新評估每個INSERT的MySQL子查詢
INSERT INTO A (id, foreign_id, value)
SELECT (SELECT MAX(id)+1 FROM A), 2, value
FROM A WHERE foreign_id = 1;
但(SELECT MAX(id)+1 FROM A)
計算一次,所以它總是會返回相同的ID。在第二行插入查詢將失敗(重複的主鍵)。
我想,第一:
INSERT INTO A (id, foreign_id, value)
SELECT MAX(id)+1, 2, value
FROM A WHERE foreign_id = 1;
但是,MAX(id)+1
考慮WHERE foreign_id = 1
,所以沒有保證,我會得到一個未使用的ID。
我如何可以繼續之一:
- 有重新計算每個
INSERT
- 或更一般的子查詢:複製給我的錶行有否auto_increment
使用'max(id)+ 1'生成一個唯一的號碼在多用戶系統中肯定會失敗。您應該使用自動增量列來代替 – 2011-12-30 11:26:50
我正確的是,您並未真正複製,您嘗試使用不同的ID創建單獨的記錄,並且使用的foreign_ID爲2,但與具有1的foreign_ID的記錄具有相同的值?所以如果你有以下2條記錄:{1,1,1} {3,1,2}你想要一個新的集合{4,2,1}和{5,2,2}?如果是這樣,你想要「複製」多少條記錄,他們是否必須按照現有的記錄順序?而不是{4,2,1}和{5,2,2}將{4,2,1}和{6,2,2}?工作? – xQbert 2011-12-30 11:30:54
@a_horse_with_no_name是的我知道,這只是一個大腳本,沒有多用戶或任何東西。 – 2011-12-30 11:30:59