我需要在一个查询中将数据插入到mysql表中。查询插入多个记录,第二个记录需要获取第一个记录的ID,并将其填充在parentid列中。我是脚本查询的新手,而且我不知道该如何完成。
示例:
| id | parentid |
| 1 | null |
| 2 | 1 |
答案 0 :(得分:1)
否,不能在单个查询中完成。
MySQL没有实现“可延迟约束”的标准 SQL功能,该功能对于此查询(INSERT
)成功而言是必需的。但是,可以在PostgreSQL或Oracle中找到解决方案。
在MySQL中这是不可能实现的,因为在第二行的插入过程中,它的外键约束将失败,因为第一行尚未“正式”存在-尽管已插入。但是,如果将FK约束检查推迟到SQL语句结束(或事务结束),则查询将成功完成...但是在MySQL中未实现。
答案 1 :(得分:1)
您可以使用LAST_INSERT_ID
,但我认为这不会被视为“一个查询”:
START TRANSACTION;
BEGIN;
INSERT INTO tablename (parent_id) VALUES
(NULL);
INSERT INTO tablename (parent_id) VALUES
(LAST_INSERT_ID());
COMMIT;