MySQL 数据管理之外键(仅做了解)

外键(了解)

被引用数据表(主表)是不能直接删除的

需要先把通过外键引用它的表(从表)删除,然后才能删除被引用数据表(主表)

如下图,删除掉student表以后grade表成功删除

  • **方式一: **在创建表的时候添加约束 (很麻烦,不建议使用)

    • 直接通过练习实例来理解

    • SQL代码

      -- 创建数据表 grade
      CREATE TABLE IF NOT EXISTS `grade`(
      		`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
      		`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
      		PRIMARY KEY(`gradeid`)
      )ENGINE=INNODB DEFAULT CHARSET=utf8
      
      
      /* studet 表的 gradeid 字段引用 grade 表的 gradeid 字段
      1.定义外键key
      		KEY `FK_外键key的名称` (`引用表的字段名`)
      2.给外键添加约束(执行引用) 
      		REFERENCES `被引用表的表名`(`被引用表的字段名`)
      */
      CREATE TABLE IF NOT EXISTS `student`(
      		`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
      		`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
      		`password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
      		`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
      		`born` DATETIME DEFAULT NULL COMMENT '出生日期',
      		`gradeid` INT(10) NOT NULL COMMENT '学生的年级', 
          	-- 需要将这个字段使用外键绑定到 grade 表的同名字段
      		
          	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
      		`email` VARCHAR(50) DEFAULT NULL COMMENT	'邮箱',
      		PRIMARY KEY(`id`),
      		KEY `FK_gradeid` (`gradeid`),  -- 定义外键key
      		CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 给这个外键添加约束
      )ENGINE=INNODB DEFAULT CHARSET=utf8 
      
    • 生成的数据表

  • 方式二:创建表以后再添加外键,稍微简单一点

    • 练习实例

    • SQL代码

      -- 创建数据表 grade
      CREATE TABLE IF NOT EXISTS `grade`(
      		`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
      		`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
      		PRIMARY KEY(`gradeid`)
      )ENGINE=INNODB DEFAULT CHARSET=utf8
      
      
      /* 添加外键方式二
      ALTER TABLE `从表表名` ADD CONSTRAINT `外键名` FOREIGN KEY(`从表字段名`) REFERENCES `主表表名`(`主表字段名`) 
      */
      CREATE TABLE IF NOT EXISTS `student`(
      		`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
      		`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
      		`password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
      		`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
      		`born` DATETIME DEFAULT NULL COMMENT '出生日期',
      		`gradeid` INT(10) NOT NULL COMMENT '学生的年级', -- 需要将这个字段使用外键绑定到 grade 表的同名字段
      		`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`);
      
    • 生成的数据表

  • 以上的操作创建的都是物理外键,仅做学习了解,以后尽量不要用

posted @   无关风月7707  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示