删除级联phpmyadmin时添加外键不起作用

8yoxcaq7  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(336)

我有一张主桌叫 book 带字段 id_book (主、唯一、自动递增)和 name . 我有一张叫 tag 带字段 book_id 以及 tag 每本书可以有许多标签。我希望当我删除一本书时,所有的标签也被删除。
我试过这个:

ALTER TABLE tag
ADD FOREIGN KEY (book_id)
REFERENCES book(id_book) 
ON UPDATE CASCADE
ON DELETE CASCADE

我知道我以前在其他项目中使用过这个sql块,它很管用,但是现在它似乎不管用了,我不知道为什么。如果我删除一本书,标签将不会被删除。

r1zk6ea1

r1zk6ea11#

我看不出sql本身有什么问题,我认为问题不在于这个特定的外键。
可能密钥没有注册或者另一个外键阻止了删除。
我用这个sql文件进行了测试,得到了想要的结果

CREATE TABLE book (
    id_book INT AUTO_INCREMENT,
    name VARCHAR(10),
    PRIMARY KEY (id_book)
);

CREATE TABLE tag (
    id INT AUTO_INCREMENT,
    book_id INT,
    name VARCHAR(10),
    PRIMARY KEY (id)
);

ALTER TABLE tag
ADD FOREIGN KEY (book_id)
REFERENCES book(id_book)
ON UPDATE CASCADE
ON DELETE CASCADE;

INSERT INTO book (`name`) VALUES ("test", "another", "and another");

INSERT INTO tag (`book_id`, `name`) VALUES (1 , "first"), (2, "first"), (1, "second");

相关问题