MySQL外键删除

标签 mysql foreign-keys relationships

我正在尝试找出关系和删除选项。

我有两个表,UserUserStaff,从 UserUserStaff 的关系是 1:n (一个用户可以有多个员工)。

当我的 User 被删除时,我想删除与该 User 关联的所有 UserStaff 表。当我的 UserStaff 被删除时,我不希望 User 发生任何事情。我知道这是一种级联关系,但我不确定是哪种方式。

即我是在 UserStaff 表中选择现有的外键并使其级联,还是在 User 中创建一个新的外键并将其设置为级联?

最佳答案

是的,这是可能的。您应该在 UserStaff 表中创建 FK。这样:

用户表

CREATE TABLE `User` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用户人员表

CREATE TABLE `UserStaff` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `UserId` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Id`),
  KEY `UserId` (`UserId`),
  CONSTRAINT `UserStaff_ibfk_1` 
    FOREIGN KEY (`UserId`) 
    REFERENCES `User` (`Id`) 
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

关于MySQL外键删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333302/

相关文章:

ios - Swift Core Data 只保存与循环中最后一个的关系

mysql - 如何在 Rails 中查询自引用 "has_many :through"关系的反转?

php - PHP调用SQL外键数据

php - mySQL SUM 和排序

php - 我可以在 PHP 中混合使用 MySQL API 吗?

mysql - 在mysql中创建具有多个IP地址的用户

Mysql 'Cascade On Delete' 删除父项时外键行不删除

mysql - 如何显示引用主表上的两个外部 ID 键的表的字符串值

mysql - 在mysql中连接两个表时遇到SequelizeEagerLoadingError

sql - 外键列允许插入不在引用列中的值