创建一对多的数据完整性关系

时间:2013-08-26 20:50:01

标签: mysql sql foreign-key-relationship

例如,如果我创建以下数据库表布局:

CREATE TABLE IF NOT EXISTS Users_parent (
ID int(255) NOT NULL AUTO_INCREMENT,
Username text NOT NULL,
Password text NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS Users_Child (
ID int(255) NOT NULL AUTO_INCREMENT,
Firstname varchar(255) NOT NULL,
SecondName varchar(255) NOT NULL,
UserID int(255) NOT NULL,

)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS Users_OtherChild (
ID int(255) NOT NULL AUTO_INCREMENT,
Warnings text NOT NULL,
UserID text NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

从阅读开始,UserID将成为与同一模式中所有其他关联表建立一对多关系的外键。

我理解这是在MySQL数据库中的存储过程中运行的,但是如果在删除所有子表之前禁止父表中的行删除,我将如何禁止在父表中删除行?

2 个答案:

答案 0 :(得分:1)

在引用父表的任何表中,外键都会阻止父项中的任何行(带有id)被删除,因为它有一个子项(在userid字段引用它的行中)。

问题是:为什么要删除子表?我想你的例子中不需要它。只要任何孩子留在该表中,参考就会成立。

使用mysql文档介绍如何创建外键:

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

答案 1 :(得分:1)

为了将父表中的删除传播到子表,您需要使用ON DELETE CASCADE选项实现外键。

有关强制执行级联删除的详细说明,请参阅here