例如,如果我创建以下数据库表布局:
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数据库中的存储过程中运行的,但是如果在删除所有子表之前禁止父表中的行删除,我将如何禁止在父表中删除行?
答案 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