我有一张AUTO_INCREMENT id
的表格,此表格还有一个parent_id
字段。在某些情况下,当插入数据本身是父项且没有父项时,我需要将parent_id
设置为与其自己的id相同的值。
使用单个sql语句可以实现这一点,还是必须执行LAST_INSERT_ID
和单独的更新语句?
由于
答案 0 :(得分:0)
你必须用分开的陈述来做。
树系统通常假设为“0”作为根或父亲的父亲项目或第一级项目的父亲,并且数据库中不存在“0”。
我建议您不要将该项目的ID设置为此项目的父项,因为...此项目是他自己的父亲?你真的需要吗?
答案 1 :(得分:0)
技术上可行,但我建议高度反对。此查询可以工作的唯一方法是,如果您可以保证不会删除任何记录,甚至我仍然说不要使用它。但如果你必须......
INSERT INTO `table` (field1, field2, parent_id)
VALUES('data1', 'data2',
(SELECT id FROM (SELECT max(id) AS id FROM `table`) AS a) + 1
)
但是,你最好在2个查询中做到这一点。理由是人工智能的工作方式。如果最后一条记录是20并且它被删除,则下一条记录将为21,但parent_id将为20,因为它会将max(id)
视为19。
答案 2 :(得分:0)
是的,你可以。要获得表格的下一个auto_increment值,您可以执行以下操作:
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE table_name='table_name'
AND table_schema='schema_name';
不要使用MAX
,因为如果从表中移除最后一行并计算最大值,它将不会为您提供下一个auto_increment值。