【发布时间】:2015-12-26 13:28:18
【问题描述】:
在我的数据库中,所有主键都是代理。有一些唯一键,但并非总是如此,因此访问特定行的最安全方法是主键。他们中的许多人使用AUTO_INCREMENT。插入两个相关表时是否必须锁定对数据库的访问?例如。
create table foo
(
foo_id numeric not null auto_increment,
sth varchar,
PRIMARY KEY(foo_id)
)
create table bar
(
bar_id numeric not null auto_increment,
foo_id numeric not null,
PRIMARY KEY(bar_id),
FOREIGN KEY (foo_id) REFERENCES foo(foo_id)
)
首先我将 sth 插入到 foo 中,然后我需要 foo_id 值将相关的东西插入到 bar 中。这个值我可以从INFORMATION_SCHEMA.TABLES 得到。但是,如果有人在我获得auto_increment 值之前将新行添加到 foo 中怎么办?如果所有这些步骤都在存储过程中,是否有隐式启动的事务锁定一个过程调用所需的所有资源?或者也许我必须明确使用START TRANSACTION。如果我不使用过程 - 只是插入和选择序列怎么办?
【问题讨论】: