数据库设计:自动增量键和更新不一致

时间:2012-09-18 14:40:39

标签: mysql database-schema

两个表共享唯一标识符“id”。这两个表都是使用'id'连接的。 将“id”定义为两个表中的自动递增主键可能存在更新不一致的风险。

是否有一些通用的模式可以避免这种情况,或者我是否必须先处理更新table1和table2,然后使用最后插入的id(因此不会将id声明为table2中的auto inc)?

4 个答案:

答案 0 :(得分:1)

在任意数量的表中,相同的列名“id”没有问题。

多个持久层框架以同样的方式执行。

只需在SQL中使用别名来相应地区分表。

答案 1 :(得分:1)

我是否必须首先使用最后插入的id来处理更新table1和table2(因此不在表2中将id声明为auto inc)?

是。并使id成为外键,因此只有在table1中已经存在它才能存在于table2中。

答案 2 :(得分:1)

是的,并且记得将操作包装在事务中。

答案 3 :(得分:1)

首先,如果您在MySQL中使用InnoDB表引擎,则可以使用事务和外键来保证数据的一致性。

其次,在第一个表中插入之后,您可以获取最后一个插入ID(取决于您访问数据库的方式)并将其用作外键。

例如 表1:Usersuser_id, username 表2:User_Profilesuser_id, name, phone

在User_Profiles中,您不需要将user_id定义为自动增量,但首先在Users表中插入记录,并使用user_id作为User_Profiles记录。如果你在事务中执行此操作,则在事务连接完成之前将不会看到Users记录,这样即使在插入用户之后但在插入之前发生了不好的事情,也可以保证个人资料 - 不会有混乱的数据。

您还可以定义user_id表中的User_Profiles列是Users表的外键,因此如果有人从Users表中删除记录,数据库就会自动删除User_Profiles中的那个。还有很多其他选择 - 请阅读更多相关内容。