MySQL外键删除

Bau*_*aub 21 mysql foreign-keys relationships

我试图找出关系和删除选项.

我有两个表,User并且UserStaff从1 User到n的关系UserStaff(用户可以有多个工作人员).

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

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

Evg*_*kiy 22

是的,这是可能的.您应该在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;
Run Code Online (Sandbox Code Playgroud)

UserStaff表

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;
Run Code Online (Sandbox Code Playgroud)


Han*_*ele 8

来自维基百科:

级联

每当删除(引用)表中的主(引用)表中的行时,具有匹配外键列的子(引用)表的相应行也将被删除(分别更新).这称为级联删除(resp.update [2]).

这里User是主表,UserStaff是子表.所以,是的,你要创建的外键UserStaff,用ON DELETE CASCADE