short version:在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。
我做错什么了?
2条答案
按热度按时间dsekswqp1#
您可以通过替换以下内容来修复它:
使用此选择查询:
以下是完整的查询:
更新:
尽管这个答案解决了在insert查询中获取select max的一般问题,正如@raymondnijland所建议的,但最好充分利用mysql的自动增量功能。为此:
1) 使主键列自动递增:
2) 从插入查询中删除id:
hjzp0vay2#
对sql查询使用手动增量可能导致竞争条件。在创建表pk(主键)时,应该有ai(自动递增)约束。
如果必须使用手动增量,请使用select语句。