2011-09-06 95 views
0

这是一种概念验证草案,让事情能够正常工作,但不希望有完全废话的代码。对于我的数据库,我尝试使用innoDB获得真正的外键关系,但无法获得它。MySQL外键关系vs mysql_insert_id关联表

取而代之的是使用外键,我决定在插入之后,将mysql_insert_id()保存为变量,然后将该变量放入相关表中。

这太可怕了吗?一切似乎都很顺利,我可以根据需要连接和关联ID。使用外键会给我的方法带来什么好处(除了更新/删除级联)?

+1

如果我正确理解你,你正在做'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

+0

我试图比较使用mysql_insert_id实际上烘烤关系正确的数据库:'ADD CONSTRAINT'mytable'FOREIGN KEY('my_id')REFERENCES'othertable'('other_id')ON DELETE CASCADE ON UPDATE CASCADE; – Ryan

+0

不让我编辑我的评论,但要确认你的假设:是的,这正是我正在做的。 – Ryan

回答

0

要创建一个关系(master-> detail),您必须始终自己提供密钥,或者使用mysql_insert_id,自然键或应用程序生成的密钥。 FOREIGN KEY是不会让为你工作。

FOREIGN KEY做什么是

  • 帮助你执行的关系/你的数据的完整性(因此,“详细”记录不指向一个无效的母公司)
  • 把手删除或主码改变记录(ON DELETE ...,ON UPDATE ...)。
  • 它也是你的“细节” - 表创建索引的“master_id” -ROW如果不存在,就(好吧,你也可以做,没有FOREIGN KEY
  • 也有一些种类的记录目的例如企业风险管理的工具,可以重新设计从你的架构中的关系模型(好吧,这一点轻微的长镜头)

相比,它的好处加入FOREIGN KEY约束语句的成本小。

+0

啊,这清除了我。万分感谢! – Ryan