[英]How to use SELECT MAX inside an INSERT statement in MySQL?
簡短版本:如何在使用INSERT INTO語句添加行時獲取列的最大值並使用結果?
長版:我已經讀過這樣一個問題: 如何在MySQL'insert'語句中使用'select'並嘗試按照說明進行解答。 這是我的查詢:
INSERT INTO employee (id, name, state, supervisorId) SELECT MAX(id)+1, 'Dan', state, supervisorId FROM employee WHERE name='Chris';
但我得到這個錯誤:
ERROR: 1062: Duplicate entry '7' for key 'PRIMARY'
原因是我有另一行,其id為7.因此,
MAX(id)
不返回實際的最大值,而是返回一個值,該值等於包含'Chris'的行的id,即6。
我究竟做錯了什么?
您可以通過替換它來修復它:
MAX(id)+1
使用此選擇查詢:
(SELECT MAX(id)+1 FROM employee)
這是完整的查詢:
INSERT INTO employee (id, name, state, supervisorId) SELECT (SELECT MAX(id)+1 FROM employee), 'Dan', state, supervisorId FROM employee WHERE name='Chris';
更新:
雖然這個答案解決了關於在INSERT查詢中獲取SELECT MAX的一般問題,正如@RaymondNijland建議的那樣,最好充分利用MySQL的auto_increment功能。 為此:
1)創建主鍵列,自動遞增:
ALTER TABLE employee MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
2)從插入查詢中刪除id:
INSERT INTO employee (name, state, supervisorId) SELECT 'Dan', state, supervisorId FROM employee WHERE name='Chris';
在SQL查詢上使用手動增量可能會導致競爭條件。 創建表PK(主鍵)時,應該有AI(自動增量)約束。
CREATE TABLE table_name
(
table_id int NOT NULL PRIMARY KEY AUTO INCREMENT,
....
);
如果您必須使用手動增量,請使用SELECT語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.