mysql - 获得 "foreign key constraint fails"即使我有 "on delete cascade"

标签 mysql sql foreign-keys cascade

我认为 ON DELETE CASCADE 的意义在于这不会发生。 :\我有下表:

CREATE TABLE Tweets (
    tweetID INTEGER                 NOT NULL AUTO_INCREMENT,
    userID INTEGER                  NOT NULL,
    content VARCHAR(140)            NOT NULL,
    dateTime TIMESTAMP              NOT NULL DEFAULT CURRENT_TIMESTAMP,
    hasPoll INTEGER                 NOT NULL,
    visible INTEGER                 NOT NULL DEFAULT 1,
    PRIMARY KEY (tweetID),
    FOREIGN KEY (userID) REFERENCES Users(userID)
    ON DELETE CASCADE
);

CREATE TABLE Polls (
    pollID INTEGER NOT NULL AUTO_INCREMENT,
    tweetID INTEGER NOT NULL,
    pollOptionText VARCHAR(300),
    PRIMARY KEY (pollID),
    FOREIGN KEY (tweetID) REFERENCES Tweets(tweetID)
);

问题是,当我尝试删除附有投票的推文时,出现以下错误(通过 Flask):

_mysql_exceptions.IntegrityError
IntegrityError: (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`twitter`.`polls`, CONSTRAINT `polls_ibfk_1` FOREIGN KEY (`tweetID`) REFERENCES `Tweets` (`tweetID`))')

请帮忙!

最佳答案

这确实是删除级联的重点。您收到错误,因为您的代码没有声明删除级联从“poll”到“tweet”。

CREATE TABLE Polls (
    pollID INTEGER NOT NULL AUTO_INCREMENT,
    tweetID INTEGER NOT NULL,
    pollOptionText VARCHAR(300),
    PRIMARY KEY (pollID),
    FOREIGN KEY (tweetID) REFERENCES Tweets(tweetID)
      ON DELETE CASCADE
);

当“推文”中的相应行被删除时,这将删除“投票”中的行。

关于mysql - 获得 "foreign key constraint fails"即使我有 "on delete cascade",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057642/

相关文章:

javascript - 如何根据点击从时间选择器字段中获取值?

java - Hibernate onetomany 中的外键未更新

php - 在 MySQL 表中搜索逗号分隔的区号

mysql - 减去 2 个 SQL 查询的输出

mysql - 在插入时将唯一记录隐式插入外键表

php - 对值相同的 2 列求和

java - Hibernate 自定义查找器 SQL 查询不返回 OneToMany 关系

SQL : Adding foreign key on existing composite key

mysql - 找出Mysql上的FK创建错误

sql - 如何解决 'Foreign key constraint is incorrectly formed'问题