mysql - ON DELETE CASCADE 删除多余的行
问题描述
我有以下表格:
CREATE TABLE workspace (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
uid VARCHAR(255),
name NVARCHAR(255)
);
CREATE TABLE userGroup (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
workspaceId INT,
FOREIGN KEY (workspaceId) REFERENCES workspace(id) ON DELETE CASCADE,
name NVARCHAR(255)
);
CREATE TABLE userWorkspaceMapping (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
workspaceId INT,
FOREIGN KEY (workspaceId) REFERENCES workspace(id) ON DELETE CASCADE,
userId INT,
FOREIGN KEY (userId) REFERENCES user(id),
userGroupId INT,
FOREIGN KEY (userGroupId) REFERENCES userGroup(id) ON DELETE CASCADE
);
而这个数据userWorkspaceMapping
:
+----+-------------+--------+-------------+
| id | workspaceId | userId | userGroupId |
+----+-------------+--------+-------------+
| 1 | 1 | 1 | 1 | <------- I want to delete only this row
| 2 | 2 | 1 | 3 |
| 3 | 3 | 1 | 5 |
+-----------------------------------------+
当我删除 aworkspace
时,所有三行userWorkspaceMapping
都被删除,而不仅仅是第一行。
delete from workspace
where id = 1;
为什么所有内容都被删除userWorkspaceMapping
?
解决方案
您的userGroup
表还workspace
使用 ON DELETE CASCADE 约束进行引用。因此,当您在工作区中删除一行时,所有引用它的行都会userGroup
被删除。
这意味着组 1 到 5 被删除。
mysql> delete from workspace where id = 1;
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> select * from userGroup;
+----+-------------+------+
| id | workspaceId | name |
+----+-------------+------+
| 6 | 2 | b1 |
| 7 | 2 | b2 |
| 8 | 2 | b3 |
| 9 | 2 | b4 |
| 10 | 2 | b5 |
| 11 | 3 | c1 |
| 12 | 3 | c2 |
| 13 | 3 | c3 |
| 14 | 3 | c4 |
| 15 | 3 | c5 |
+----+-------------+------+
因此,该参考组 1 到 5 中的所有行都userWorkspaceMapping
将被删除。这占了所有行。
级联可以并且确实级联外键引用中的多个“步骤”。
推荐阅读
- python - 将 HSI 转换回 RGB
- arrays - 如何解决“参数(编号 [])与 SpreadsheetApp.Range.setValues 的方法签名不匹配”错误
- c# - 如何将 Microsoft Bing Speech API 文本语音功能与 MS Teams 应用程序集成
- android - GoogleSIgnInClient 注销后自动登录
- java - How to resolve the sonar issue "Correctness - This method continues a loop after finding an equality condition "
- reactjs - React material-ui选择菜单上的findDOMNode错误
- pytorch - 如何查看通过加载 .pth 文件设置的模型的前向功能?
- javascript - 我们可以在 html 的文本区域内包含一个复选框吗?
- python - Django 模型窗体。隐藏模型名称
- python - Pandas 表 - 将多索引转换为单索引