mysql要删除建表的顺序才对的_【MySQL】Create table 以及 foreign key 删表顺序考究。...

1.以下是直接从数据库导出的建表语句。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 -- ----------------------------

2 -- Table structure for files

3 -- ----------------------------

4 DROP TABLE IF EXISTS `files`;

5 CREATE TABLE `files` (

6 `id` int(11) NOT NULL,

7 `fileName` varchar(50) DEFAULT NULL,

8 `filePath` varchar(200) DEFAULT NULL,

9 `updateDate` datetime DEFAULT NULL,

10 `userId` int(11) DEFAULT NULL,

11 PRIMARY KEY (`id`)

12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

13

14 -- ----------------------------

15 -- Table structure for users

16 -- ----------------------------

17 DROP TABLE IF EXISTS `users`;

18 CREATE TABLE `users` (

19 `id` int(11) NOT NULL AUTO_INCREMENT,

20 `name` varchar(30) DEFAULT NULL,

21 `email` varchar(50) DEFAULT NULL,

22 `age` int(11) DEFAULT NULL,

23 `phone` varchar(20) DEFAULT NULL,

24 PRIMARY KEY (`id`)

25 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

48304ba5e6f9fe08f3fa1abda7d326ab.png

2.我们把表files和表users建立关系,给表files添加外键files_users_fk,并在files_users_fk上建立索引。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 -- ----------------------------

2 -- Table structure for files

3 -- ----------------------------

4 DROP TABLE IF EXISTS `files`;

5 CREATE TABLE `files` (

6 `id` int(11) NOT NULL,

7 `user_id` int(11) NULL,

8 `fileName` varchar(50) DEFAULT NULL,

9 `filePath` varchar(200) DEFAULT NULL,

10 `updateDate` datetime DEFAULT NULL,

11 `userId` int(11) DEFAULT NULL,

12 PRIMARY KEY (`id`),

13 KEY `files_users_fk` (`user_id`)

14 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

15

16 -- ----------------------------

17 -- Table structure for users

18 -- ----------------------------

19 DROP TABLE IF EXISTS `users`;

20 CREATE TABLE `users` (

21 `id` int(11) NOT NULL AUTO_INCREMENT,

22 `name` varchar(30) DEFAULT NULL,

23 `email` varchar(50) DEFAULT NULL,

24 `age` int(11) DEFAULT NULL,

25 `phone` varchar(20) DEFAULT NULL,

26 PRIMARY KEY (`id`)

27 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

28

29 ALTER TABLE files ADD CONSTRAINT files_users_fk FOREIGN KEY(`user_id`) REFERENCES users(`id`);

48304ba5e6f9fe08f3fa1abda7d326ab.png

可以看出 files 依赖表users ,依赖表不能先删除。也就是说,需要先删除当前表,再删除外键关联表

我们来看看概念:

先看On Delete属性,可能取值为:No Action, Cascade,Set Null, Restrict属性。

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

On Update是一样的?

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

比如:

ALTER TABLE files ADD CONSTRAINT files_users_fk FOREIGN KEY(`user_id`) REFERENCES users(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值