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

时间:2018-09-09 20:12:32

标签: mysql sql select max insert-into

简短版本: 使用INSERT INTO语句添加行时,如何获取列的最大值并使用结果?

长版: 我已经阅读了问题:How to use 'select ' in MySQL 'insert' statement,并尝试按照说明进行操作。这是我的查询:

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。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

您可以通过替换以下内容来对其进行修复:

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';

更新

尽管此答案解决了将SELECT MAX放入INSERT查询中的一般问题,如@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';

答案 1 :(得分:0)

在SQL查询上使用手动增量会导致争用情况。 创建表PK(主键)时,应具有AI(自动增量)约束。

    CREATE TABLE table_name
    (
    table_id int NOT NULL PRIMARY KEY AUTO INCREMENT,
    ....
    );

如果绝对必须使用手动增量,请使用SELECT语句。