簡體   English   中英

如何在MySQL中的INSERT語句中使用SELECT MAX?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM