mysql - 删除级联时不删除关联条目

标签 mysql

我有一个 marks 表,其中保存关联消息的外键。我使用 ON DELETE ,期望删除 marks 表中的条目也会删除关联的消息。但它并没有按预期工作。 I checked out all the other post and can't find any relevant to this one.

我可以成功插入数据库

DELETE FROM marks WHERE x = 37.7836

但是当我删除标记时,与其关联的消息不会被删除。关于我在这里做错了什么有什么见解吗?

编辑: 这是我演示删除过程的图片: enter image description here

架构

DROP DATABASE uncovery;
CREATE DATABASE uncovery;

SET foreign_key_checks=0;

USE uncovery;

CREATE TABLE marks (
  id int(5) AUTO_INCREMENT,
  x float(10, 6),
  y float(10, 6),
  z float(10, 6),
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
  messageId int(5),
  FOREIGN KEY (messageId)
    REFERENCES messages(id)
    ON DELETE CASCADE,
  PRIMARY KEY (id)
);

CREATE TABLE messages (
  id int(5) AUTO_INCREMENT,
  messageString text,
  PRIMARY KEY (id)
);

编辑 2:架构重构

这是我新更新的架构: enter image description here

正如您所看到的,当我尝试运行它时,我收到一条错误消息,表明它无效:

enter image description here

最佳答案

您创建的外键不会按您期望的方式工作。在您的架构下,如果从 messages 中删除条目,它将从 marks 表中删除所有相应的条目,而不是相反。

此外,您必须确保您的表使用 InnoDB 存储引擎,否则您的外键将根本不起作用。 MyISAM 引擎类型不支持它们。

要使您的模式正常工作,以便删除标记将导致消息被删除,您需要将 markId 作为消息表中的外键,如下所示:

CREATE TABLE `messages` (
  `id` int(5) NOT NULL auto_increment,
  `messageString` text,
  `markId` int(5) default NULL,
  PRIMARY KEY  (`id`),
  KEY `markId` (`markId`),
  CONSTRAINT `messages_ibfk_1` FOREIGN KEY (`markId`) REFERENCES `marks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE `marks` (
  `id` int(5) NOT NULL auto_increment,
  `x` float(10,6) default NULL,
  `y` float(10,6) default NULL,
  `z` float(10,6) default NULL,
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

关于mysql - 删除级联时不删除关联条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29441946/

相关文章:

mysql - 如何在mysql中将动态ID与选择查询结合起来

mysql - 使用 ORDER BY 和 LIMIT MYSQL 更新多个不同的表

python - 如何只删除或编辑sql表中的一行?

java - 即使有 jar 文件也无法将 Java 连接到 MySQL 数据库

php 从 mysql 获取 ▒ 而不是 æøå

c# - 元数据异常 : Schema specified is not valid

mysql - 如何在 MySQL SELECT 中查找某些 Hex 值和 Char() 值

php - 我的逻辑正确吗? Ajax 和/或 PHP 与 Mysql

mysql - 错误 1062 (23000) : Duplicate entry '2147483647' for key 'PRIMARY'

mysql - 根据 1 个字段或另一个字段选择计数 - 条件计数