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

问题描述 投票:3回答:2

简短版本:如何在使用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。

我究竟做错了什么?

mysql sql select max insert-into
2个回答
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';

更新:

虽然这个答案解决了关于在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';

0
投票

在SQL查询上使用手动增量可能会导致竞争条件。创建表PK(主键)时,应该有AI(自动增量)约束。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.