MySQL数据管理----外键(了解)
外键(了解)
方式一、在创建表时,增加约束(麻烦、比较复杂)
CREATE TABLE `grade`( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id‘, `gradename` VARCHAR(50) NOT NULL COMMENT ‘年级名称‘, PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生表的 gradeid 字段 要引用年级表的 gradeid -- 定义外键key -- 给这个外键 添加约束(执行引用)references(引用) DROP TABLE IF EXISTS `student`; CREATE TABLE `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 ‘出生日期‘, `gradeid` INT(10) NOT NULL COMMENT ‘学生的年级‘, `address` varchar(100) DEFAULT NULL COMMENT ‘家庭住址‘, `email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘, PRIMARY KEY (`id`), KEY `FK_gradeid` (`gradeid`), CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
关键两句:
KEY `FK_gradeid` (`gradeid`), CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
缺点:
? 删除有外键关系的表时,必须要先删除引用别人的表(从表),再删除引用表(主表)
方式二:成功创建表后,添加外键约束
CREATE TABLE `grade`( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id‘, `gradename` VARCHAR(50) NOT NULL COMMENT ‘年级名称‘, PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生表的 gradeid 字段 要引用年级表的 gradeid -- 定义外键key -- 给这个外键 添加约束(执行引用)references(引用) DROP TABLE IF EXISTS `student`; CREATE TABLE `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 ‘出生日期‘, `gradeid` INT(10) NOT NULL COMMENT ‘学生的年级‘, `address` varchar(100) DEFAULT NULL COMMENT ‘家庭住址‘, `email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘, PRIMARY KEY (`id`) -- KEY `FK_gradeid` (`gradeid`), -- CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 -- 创建表时,没有外键关系 ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`); -- ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 那个表(那个字段)
优点:
? 在创建表时,可以先不用考虑各个表间的关系,等创建完成,再进行关联
问题:
? 以上的操作都是物理外键---数据库级别的外键,不建议使用!(避免数据库过多造成困扰)
最佳实践
- 数据库就只是单纯的表,用来存数据,只有行(记录)和列(字段)
- 若想使用多张表的数据,想使用外键,在 程序级别 实现多表联查
相关推荐
敏敏张 2020-11-11
数据库之扑朔迷离 2020-08-18
北桥源木 2020-08-15
ssjdoudou 2020-08-09
boredbird 2020-08-07
InJavaWeTrust 2020-06-21
QianChia 2020-06-14
窃破天道 2020-06-12
Lius 2020-05-27
Rain 2020-04-15
dreamhua 2020-04-30
dayi 2020-04-29
iflreey 2020-04-29
bluetears 2020-04-18
neverstopforcode 2020-04-15
chenjiazhu 2020-03-28
aweilark 2020-03-06
imacoder 2020-02-23
DAV数据库 2020-02-21