手动指定主键值

时间:2014-04-16 18:33:59

标签: mysql

我有一个表'posts',有一堆现有的行。对于这些行的子集,我正在创建一个新表'specialposts',并引用原始'posts'表中的现有行。由于遗留的原因,它将成为我的&如果对于所有'specialposts'行,我的客户的生活会更容易,他们的主键与主键相同 '帖子'表。

我没有在没有首先创建相应的Post行的情况下创建一个SpecialPost - 我可以通过在每个专门的INSERT上手动指定主键而不是依赖于自动增量来遇到什么问题?

2 个答案:

答案 0 :(得分:1)

如果没有提供任何值,AUTO_INCREMENT列将自动填充值,但如果您想提供一个值,则可以自由填充。请注意,如果这是PRIMARY KEY列,则必须提供唯一ID,并且冲突会产生错误。

只要不存在冲突风险,保持表之间的标识符同步即可。

如果你有一些代码有时会指定固定ID,而其他时候会自动发出它们,你可能会遇到麻烦,你可能会遇到竞争条件。为了简化操作,您可能需要确保辅助表在主键上已关闭AUTO_INCREMENT

答案 1 :(得分:1)

问:我可以通过在每个specialpost INSERT上手动指定主键而不是依赖自动增量来遇到什么问题?

A:在为PRIMARY KEY约束定义为(或作为其一部分)的列提供值时,没有问题(就数据库而言)。

您将遇到的问题是确定/检索插入id表中的行的post auto_increment值的值。

对于单例插入(将单行插入post表),在INSERT之后检索分配给AUTO_INCREMENT列的值很容易:

SELECT LAST_INSERT_ID();

您可以在INSERT中将返回的值提供给specialpost表。

(请注意,对于多行插入,LAST_INSERT_ID()返回的值将是分配给第一行行的值。)

根据您的描述,听起来您还想在两个表之间定义FOREIGN KEY约束,specialpost引用post中的行。

例如:

post
( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY

specialpost
( post_id INT UNSIGNED PRIMARY KEY
, CONSTRAINT FK_specialpost_post FOREIGN KEY (post_id) REFERENCES post (id)