zoukankan      html  css  js  c++  java
  • MySQL数据管理----外键(了解)

    外键(了解)

    image-20200529232322345

    方式一、在创建表时,增加约束(麻烦、比较复杂)

    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 那个表(那个字段)
    

    优点:

    ​ 在创建表时,可以先不用考虑各个表间的关系,等创建完成,再进行关联

    问题:

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

    最佳实践

    • 数据库就只是单纯的表,用来存数据,只有行(记录)和列(字段)
    • 若想使用多张表的数据,想使用外键,在 程序级别 实现多表联查
  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/mytJava/p/12990160.html
Copyright © 2011-2022 走看看