-4

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

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 数据库中的存储过程中运行,但是在删除所有子表之前,我将如何禁止父表中的行删除,这样就不会有与父表关联的子信息?

4

2 回答 2

1

外键将防止父表中的任何行(带有 id)被删除,而它在引用父表的任何表中还有一个子表(如在用户 ID 字段引用它的行中)。

问题是:为什么要删除子表?我认为在您的示例中不需要它。只要有任何孩子留在该表中,该引用就会保留。

使用 mysql 文档了解如何创建外键:

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

于 2013-08-26T21:12:21.810 回答
1

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

有关强制级联删除的详细说明,请参见此处

于 2013-08-26T21:13:30.140 回答