我有一个带有 的表AUTO_INCREMENT id
,这个表也有一个parent_id
字段。在某些情况下,当插入数据本身是父级并且没有父级时,我需要将其设置parent_id
为与其自己的 id 相同的值。
这可能与单个 sql 语句,还是我必须做LAST_INSERT_ID
一个单独的更新语句?
谢谢
这在技术上是可行的,尽管我强烈反对它。这个查询可以工作的唯一方法是,如果你能保证不会删除任何记录,即使我仍然说不要使用它。但如果你必须...
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。
是的你可以。要获取表的下一个 auto_increment 值,您可以执行以下操作:
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE table_name='table_name'
AND table_schema='schema_name';
不要使用MAX
,因为如果你从表中删除最后一行并计算最大值,它不会给你下一个 auto_increment 值。
你必须在单独的语句中做。
树系统通常假定“0”为根或无父项的父项或一级项的父项,而“0”在数据库中不存在。
我建议您不要将 item 的 id 设置为该 item 的 parent,因为...这个 item 是他自己的父亲?你真的需要那个吗?