MySQL将附加字段的值设置为自动递增值

时间:2012-08-08 14:49:56

标签: mysql sql

我有一张AUTO_INCREMENT id的表格,此表格还有一个parent_id字段。在某些情况下,当插入数据本身是父项且没有父项时,我需要将parent_id设置为与其自己的id相同的值。

使用单个sql语句可以实现这一点,还是必须执行LAST_INSERT_ID和单独的更新语句?

由于

3 个答案:

答案 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值。