这是一种概念验证草案,让事情能够正常工作,但不希望有完全废话的代码。对于我的数据库,我尝试使用innoDB获得真正的外键关系,但无法获得它。MySQL外键关系vs mysql_insert_id关联表
取而代之的是使用外键,我决定在插入之后,将mysql_insert_id()保存为变量,然后将该变量放入相关表中。
这太可怕了吗?一切似乎都很顺利,我可以根据需要连接和关联ID。使用外键会给我的方法带来什么好处(除了更新/删除级联)?
这是一种概念验证草案,让事情能够正常工作,但不希望有完全废话的代码。对于我的数据库,我尝试使用innoDB获得真正的外键关系,但无法获得它。MySQL外键关系vs mysql_insert_id关联表
取而代之的是使用外键,我决定在插入之后,将mysql_insert_id()保存为变量,然后将该变量放入相关表中。
这太可怕了吗?一切似乎都很顺利,我可以根据需要连接和关联ID。使用外键会给我的方法带来什么好处(除了更新/删除级联)?
要创建一个关系(master-> detail),您必须始终自己提供密钥,或者使用mysql_insert_id
,自然键或应用程序生成的密钥。 FOREIGN KEY
是不会让,为你工作。
FOREIGN KEY
做什么是
FOREIGN KEY
)相比,它的好处加入FOREIGN KEY
约束语句的成本小。
啊,这清除了我。万分感谢! – Ryan
如果我正确理解你,你正在做'mysql_query('INSERT INTO master ...'); $ master_id = mysqsl_insert_id(); mysql_query(“INSERT INTO detail(master_id,...)values('$ master_id',...)”);'。然后,不,这不是可怕的,这是你可以做的唯一的事情来创建关系。唯一的另一种方法是使用[“自然键”](http://en.wikipedia.org/wiki/Natural_key)或由您的应用程序生成的键,但唯一的区别是您不能使用'mysql_insert_id '而是来自用户。你究竟是什么意思的外键? – vstm
我试图比较使用mysql_insert_id实际上烘烤关系正确的数据库:'ADD CONSTRAINT'mytable'FOREIGN KEY('my_id')REFERENCES'othertable'('other_id')ON DELETE CASCADE ON UPDATE CASCADE; – Ryan
不让我编辑我的评论,但要确认你的假设:是的,这正是我正在做的。 – Ryan