hooyantsing's Blog

12_数据库级别的外键

字数统计: 438阅读时长: 2 min
2020/09/05

12 数据库级别的外键

狂神说Java MySQL最新教程通俗易懂

方式一:创建表时设置外键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE IF NOT EXISTS `grade` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id' ,
`name` VARCHAR(50) NOT NULL COMMENT '年级名称' ,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号' ,
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名' ,
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码' ,
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别' ,
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期' ,
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址' ,
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱' ,
`gradeid` INT(10) NOT NULL COMMENT '年级id' ,
PRIMARY KEY(`id`) ,

KEY `FK_gradeid`(`gradeid`) ,
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`id`)

)ENGINE=INNODB DEFAULT CHARSET=utf8

方式二:表外设置外键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE IF NOT EXISTS `grade` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id' ,
`name` VARCHAR(50) NOT NULL COMMENT '年级名称' ,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号' ,
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名' ,
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码' ,
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别' ,
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期' ,
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址' ,
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱' ,
`gradeid` INT(10) NOT NULL COMMENT '年级id' ,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 表外设置外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`id`)

总结

不建议使用 以上操作,都是物理外键,数据库级别的外键。

最佳实践

  • 数据库就是单独的表, 只用来存数据,只有行(数据)和列(字段)
  • 如果需要外键功能,使用程序逻辑实现。
CATALOG
  1. 1. 12 数据库级别的外键
    1. 1.0.1. 方式一:创建表时设置外键
    2. 1.0.2. 方式二:表外设置外键
    3. 1.0.3. 总结