首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中,删除级联不起作用

问在mysql中,删除级联不起作用
EN

Stack Overflow用户
提问于 2011-09-06 12:54:40
回答 4查看 22.6K关注 0票数 14

类似于ON DELETE CASCADE not working in MySQL,但有些地方不对劲:

ANSI方法

代码语言:javascript
复制
-- test delete cascade
CREATE TABLE t1(
    id SERIAL PRIMARY KEY,
    data TEXT
);

CREATE TABLE t2(
    id INT PRIMARY KEY REFERENCES t1(id) ON DELETE CASCADE,
    data2 TEXT
);

INSERT INTO t1 VALUES(1, 'one');
INSERT INTO t2 VALUES(1, 'first');

DELETE FROM t1;
SELECT * FROM t2; -- should have not rows - have one!

在postgres中一直使用它,但由于某些原因,它无法在mysql中运行。

我正在慢慢学习,有ansi标准,postgreql方式,还有mysql方式。每次我觉得我有点欣赏到这种差异,我就没有接近。

MySQL方式

代码语言:javascript
复制
CREATE TABLE `t2` (
    `id` BIGINT(20) UNSIGNED NOT NULL,
    `data2` TEXT,
    PRIMARY KEY (`id`),
    CONSTRAINT `FK_t2_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = latin1;

对我来说,我所拥有的代码是ansi标准,非常有意义,并且(就SQL而言)是美观的,而mysql方式(谢谢帮助!)这让我想起了Visual之类的东西--它真的像罪恶一样丑陋,让聪明的人贬低自己写这样的东西是不对的。

如果我大喊大叫的话,我很抱歉,我应该得到多少负面的评价。你们这些轻松编写这段代码的人,我最尊敬你们。我只是不喜欢看到这种对朋友毫无意义的惩罚;-)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-06 13:06:06

如果您像这样创建t2,它会运行得很好:

代码语言:javascript
复制
CREATE TABLE  `t2` (
  `id` bigint(20) unsigned NOT NULL,
  `data2` text,
  PRIMARY KEY (`id`),
  CONSTRAINT `FK_t2_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ETA,为了回应对丑陋代码的关注,下面的内容也是有效的:

代码语言:javascript
复制
CREATE TABLE  t2 (
  id bigint(20) unsigned NOT NULL PRIMARY KEY,
  data2 text,
  CONSTRAINT  FOREIGN KEY (id) REFERENCES t1(id) ON DELETE CASCADE
) ENGINE=InnoDB ;

主要区别是t2.id的数据类型必须与t1.id匹配,约束必须在列之后声明。

票数 7
EN

Stack Overflow用户

发布于 2011-09-06 13:08:27

(假设这应该是表t2中的“外键”而不是“主键”)

MySQL只是忽略所有内联外键约束,而没有警告。

因此,您需要显式地添加外键约束,如dnagirl所示。

票数 5
EN

Stack Overflow用户

发布于 2017-01-17 07:07:17

将foreign_key_checks设置为1时,我在导出和导入数据时遇到了这个问题,在此期间它被设置为0。

/*!40014套@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=1 */;

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7320236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档