Sql 在事务中保留自动增量ID

Sql 在事务中保留自动增量ID,sql,mysql,Sql,Mysql,假设我有两个表,用户和组,每个表都有一个自动递增的主键。每当创建一个新用户时,我都希望与该用户一起创建一个组(同时/同一事务)。然而,用户需要知道他们属于哪个组,因此每个用户存储一个组id 为了做到这一点,我创建了一个组并将其插入到数据库中,找出我刚才插入的组的主键是什么,最后用新组的主键插入用户 请注意,我需要将该组提交到数据库(从而使其在提交用户的任何事务之外),以便检索分配给它的主键 虽然这在大多数情况下都可以工作,但如果在插入组并找出其主键和插入用户之间出现某种故障(电源故障、系统崩溃等

假设我有两个表,用户和组,每个表都有一个自动递增的主键。每当创建一个新用户时,我都希望与该用户一起创建一个组(同时/同一事务)。然而,用户需要知道他们属于哪个组,因此每个用户存储一个组id

为了做到这一点,我创建了一个组并将其插入到数据库中,找出我刚才插入的组的主键是什么,最后用新组的主键插入用户

请注意,我需要将该组提交到数据库(从而使其在提交用户的任何事务之外),以便检索分配给它的主键

虽然这在大多数情况下都可以工作,但如果在插入组并找出其主键和插入用户之间出现某种故障(电源故障、系统崩溃等),则最终会导致数据库不一致

有没有一种方法可以临时保留主键,这样在系统崩溃时,它就不会处于不一致的状态


我主要关心的是MySQL数据库,但如果标准SQL中有某种东西允许我这样做(因此与其他数据库后端兼容),我也很想知道这一点。

如果使用事务,那么就不会有问题。

很简单,只需将这两个操作放在一个事务中即可。启动事务,创建组,创建用户,然后提交事务

SET autocommit = 0

START TRANSACTION

INSERT INTO Groups ...
INSERT INTO Users ...

COMMIT

不过,您必须为您的表使用支持事务的引擎,例如InnoDB,才能使其正常工作。默认的MyISAM引擎不支持事务。

我应该澄清一下:我需要将组提交到数据库,以便知道它的主键是什么。然后我可以使用组的id提交用户。这会阻止我在同一个事务中组合这两个用户。这很可悲。你能换成真正的关系数据库管理系统吗?还是你被卡住了?