mysql级联失败,在mysql中,关于删除级联不起作用

similar to ON DELETE CASCADE not working in MySQL, but something is not right:

The ANSI Way

-- 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!

use this all the time in postgres, but for some reason cannot get it going in mysql.

I am slowly learning, there is the ansi-standard, postgreql way, and there is the mysql way. Each time I think I have somewhat appreciated the difference, I haven't come close.

The MySQL Way

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;

To me, the code I have is ansi standard, makes perfect sense, and is (as far as SQL goes) aesthetically pleasing, whereas, the mysql way (thanks for the help!) reminds me of Visual Basic or something - it's really ugly as sin and imho it's wrong to ask intelligent people to debase themselves to write such a thing.

I apologize if ranting, and justly deserve any number of negative ratings. You guys who write this code with ease have my greatest respect. I just hate to see this sort of meaningless punishment inflicted on friends ;-)

解决方案

If you create t2 like this it works fine:

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, in answer to concerns about ugly code, the below also works:

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 ;

The main difference is that the data type for t2.id must match that of t1.id and constraints have to be declared after the columns.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值