两个表共享唯一标识符“id”。这两个表都是使用'id'连接的。 将“id”定义为两个表中的自动递增主键可能存在更新不一致的风险。
是否有一些通用的模式可以避免这种情况,或者我是否必须先处理更新table1和table2,然后使用最后插入的id(因此不会将id声明为table2中的auto inc)?
答案 0 :(得分:1)
在任意数量的表中,相同的列名“id”没有问题。
多个持久层框架以同样的方式执行。
只需在SQL中使用别名来相应地区分表。
答案 1 :(得分:1)
我是否必须首先使用最后插入的id来处理更新table1和table2(因此不在表2中将id声明为auto inc)?
是。并使id成为外键,因此只有在table1中已经存在它才能存在于table2中。
答案 2 :(得分:1)
是的,并且记得将操作包装在事务中。
答案 3 :(得分:1)
首先,如果您在MySQL中使用InnoDB表引擎,则可以使用事务和外键来保证数据的一致性。
其次,在第一个表中插入之后,您可以获取最后一个插入ID(取决于您访问数据库的方式)并将其用作外键。
例如
表1:Users
:user_id, username
表2:User_Profiles
:user_id, name, phone
在User_Profiles中,您不需要将user_id
定义为自动增量,但首先在Users
表中插入记录,并使用user_id
作为User_Profiles
记录。如果你在事务中执行此操作,则在事务连接完成之前将不会看到Users
记录,这样即使在插入用户之后但在插入之前发生了不好的事情,也可以保证个人资料 - 不会有混乱的数据。
您还可以定义user_id
表中的User_Profiles
列是Users
表的外键,因此如果有人从Users
表中删除记录,数据库就会自动删除User_Profiles
中的那个。还有很多其他选择 - 请阅读更多相关内容。