Mysql 为什么在删除级联上没有删除引用的记录?

Mysql 为什么在删除级联上没有删除引用的记录?,mysql,Mysql,我已经用下面所示的代码创建了一个。问题是在DELETE语句之后,相关的信用卡记录也应该被删除 CREATE TABLE person ( id BIGINT AUTO_INCREMENT PRIMARY KEY ); CREATE TABLE credit_card ( id BIGINT AUTO_INCREMENT PRIMARY KEY ); CREATE TABLE person_credit_card ( person_id BIGINT NOT NULL, cre

我已经用下面所示的代码创建了一个。问题是在
DELETE
语句之后,相关的
信用卡
记录也应该被删除

CREATE TABLE person (
  id BIGINT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE credit_card (
  id BIGINT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE person_credit_card (
  person_id BIGINT NOT NULL,
  credit_card_id BIGINT NOT NULL UNIQUE, -- Please note that this is UNIQUE
  PRIMARY KEY(person_id, credit_card_id),

  CONSTRAINT fk__person_credit_card__person
    FOREIGN KEY (person_id)
    REFERENCES person(id), 

  KEY pkey (credit_card_id),
  CONSTRAINT fk__person_credit_card__credit_card
    FOREIGN KEY (credit_card_id)
    REFERENCES credit_card(id) 
      ON DELETE CASCADE 
      ON UPDATE CASCADE
);

INSERT INTO person (id) VALUES (1);
INSERT INTO credit_card (id) VALUES (1);
INSERT INTO person_credit_card (person_id, credit_card_id) VALUES (1, 1);

DELETE FROM person_credit_card WHERE credit_card_id = 1;
我不知道这为什么不起作用。在
信用卡id上有
唯一的
约束时,这是不可能的:

+--------------------------------------+
| person_credit_card                   |
+--------------------------------------+
| person_id | credit_card_id           |
+--------------------------------------+
| 1         | 1                        |
+--------------------------------------+
| 2         | 1                        |
+--------------------------------------+
那么,我在这里做错了什么?我如何才能让它发挥作用


我还尝试删除一个
并删除他所有的
信用卡
记录(见其他):

但结果是,只有解析表丢失了其条目,但信用卡记录仍然存在。

来自:

级联:从父表中删除或更新行,并 自动删除或更新子表中的匹配行。 同时支持删除级联和更新级联


从个人信用卡中删除不会级联个人或信用卡。 Cascade的工作原理是从引用被删除记录的表中删除/更新记录。
换句话说,由于person没有涉及person\u credit\u card的列,因此它不会被删除。

从父表中删除将反映在子表中,而不是在子表中以拼写错误(不太可能对未来读者有用)@Drew“作为拼写错误”?表示n-n关系的组合需要触发器,或类似的后处理技术。在Sebas正确完成后,n-n的合成可以在FK中进行
CREATE TABLE person (
  id BIGINT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE credit_card (
  id BIGINT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE person_credit_card (
  person_id BIGINT NOT NULL,
  credit_card_id BIGINT NOT NULL UNIQUE,
  PRIMARY KEY(person_id, credit_card_id),

  CONSTRAINT fk__person_credit_card__person
    FOREIGN KEY (person_id)
    REFERENCES person(id)
      ON DELETE CASCADE 
      ON UPDATE CASCADE, 

  CONSTRAINT fk__person_credit_card__credit_card
    FOREIGN KEY (credit_card_id)
    REFERENCES credit_card(id) 
      ON DELETE CASCADE 
      ON UPDATE CASCADE
);

INSERT INTO person (id) VALUES (1);
INSERT INTO person (id) VALUES (2);
INSERT INTO credit_card (id) VALUES (1);
INSERT INTO credit_card (id) VALUES (2);
INSERT INTO credit_card (id) VALUES (3);

INSERT INTO person_credit_card (person_id, credit_card_id) VALUES (1, 1);
INSERT INTO person_credit_card (person_id, credit_card_id) VALUES (1, 2);
INSERT INTO person_credit_card (person_id, credit_card_id) VALUES (2, 3);

DELETE FROM person WHERE id = 1;