外键

方式一 

在创建表的时候,增加约束(麻烦)

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引用
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'性别',
    `gradeid` INT(10) NOT NULL COMMENT '学生年级',
    `birthday` DATETIME DEFAULT 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

删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

 

方式二

创建表成功后,添加外键约束

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'性别',
    `gradeid` INT(10) NOT NULL COMMENT '学生年级',
    `birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
    PRIMARY KEY(`id`)    
)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 哪个表(那个字段)

以上操作都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)

 

posted on 2022-12-14 14:28  键盘敲烂的朱  阅读(79)  评论(0编辑  收藏  举报