MySQL中表之间的关系

时间:2014-11-17 13:28:15

标签: mysql triggers

我的数据库中有两个表。

  • id int(11)主键A_I,
  • fName varchar(30),
  • lName varchar(30)

详情 which holds detail information about the person

  • id int(11)主键A_I,
  • 性别varchar(30),
  • email varchar(30),
  • age varchar(30)

我的问题是如何在从Person表中删除某人以及从详细信息中删除他/她的详细信息时,如何在两者和触发器之间建立关系? 感谢

2 个答案:

答案 0 :(得分:0)

我想也许你不需要2张桌子。为什么将人员细节存储在单独的表中你可以使用同一个表Person。这更有意义。 如果你真的需要这样做,你只需要添加一个列" personId"在你的人身上作为外键的细节。 因此,要获取一个人的所有数据,您只需加入2个表:

Select * from Person p join PersonDetails pd on p.personId = pd.personId

触发器取决于您使用的数据库。如果您使用的是SQL Server,请参阅以下链接: http://msdn.microsoft.com/fr-fr/library/ms189799.aspx

对于mysql,请参考: http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

答案 1 :(得分:0)

通过使用ON DELETE CASCADE设置外键约束,可以采用两种方法 现在查看模式,我没有看到您将人员ID存储在详细信息表中。

您可能需要在person_id表格中添加Details列,并将id表格中的Person存储到此表格中。

http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

http://www.mysqltutorial.org/mysql-on-delete-cascade/

以下是 DEMO 如何使用删除级联创建外键约束

或者你可以编写一个触发器来处理它

delimiter //
create trigger delete_person after delete on Person
for each row
begin
 delete from Details where person_id = old.id ;
end; //

delimiter ;