Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在删除时,级联删除额外的行_Mysql_Foreign Keys_Cascade - Fatal编程技术网

Mysql 在删除时,级联删除额外的行

Mysql 在删除时,级联删除额外的行,mysql,foreign-keys,cascade,Mysql,Foreign Keys,Cascade,我有以下表格: 创建表工作区( id INT NOT NULL主键自动递增, uid VARCHAR(255), 名称NVARCHAR(255) ); 创建表用户组( id INT NOT NULL主键自动递增, 工作空间ID INT, 外键(工作空间id)在删除级联时引用工作空间(id), 名称NVARCHAR(255) ); 创建表userWorkspaceMapping( id INT NOT NULL主键自动递增, 工作空间ID INT, 外键(工作空间id)在删除级联时引用工作空间(i

我有以下表格:

创建表工作区(
id INT NOT NULL主键自动递增,
uid VARCHAR(255),
名称NVARCHAR(255)
);
创建表用户组(
id INT NOT NULL主键自动递增,
工作空间ID INT,
外键(工作空间id)在删除级联时引用工作空间(id),
名称NVARCHAR(255)
);
创建表userWorkspaceMapping(
id INT NOT NULL主键自动递增,
工作空间ID INT,
外键(工作空间id)在删除级联时引用工作空间(id),
userId INT,
外键(userId)引用用户(id),
userGroupId INT,
外键(userGroupId)在删除级联上引用userGroup(id)
);
以及
用户工作空间映射的以下数据:

+----+-------------+--------+-------------+
| id | workspaceId | userId | userGroupId |
+----+-------------+--------+-------------+
| 1  |      1      |    1   |      1      |    <------- I want to delete only this row
| 2  |      2      |    1   |      3      |
| 3  |      3      |    1   |      5      |
+-----------------------------------------+
为什么要删除
userWorkspaceMapping
中的所有内容?


这里有一个问题:

您的
用户组
表还引用了带有ON-DELETE级联约束的
工作区
。因此,当您在工作区中删除一行时,在
userGroup
中引用该行的所有行都将被删除

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

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   |
+----+-------------+------+
因此,
userWorkspaceMapping
中引用组1到5的所有行都将被删除。这是所有行的原因


级联可以并且确实级联外键引用中的多个“步骤”。

级联实际上没有问题。。。我在此处插入了错误的测试ID:

插入到userWorkspaceMapping中(
用户ID,
工作空间ID,
用户组ID
)
价值观
(1, 1, 1),

(1,2,3),--您应该显示
外键(userId)引用用户(id),
表和数据。。。非常确定,如果你在所有外键中再输入一次,就会有你的答案。。。使用fiddle创建,例如:你能用fiddle重现问题吗:?给你:我得到了相同的结果,所有3行都被删除了,而不仅仅是一行。@forpas。。。标记用户。。。我看不出来。但是,又一次,是周六晚上……该死的,这不是
CASCADE
故障,而是我插入的数据。它的工作如预期,我有错误的ID插入…感谢您的答复!我想出来了。问题不在于级联,而在于我的测试数据,在那里我插入了错误的ID。。。