最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL零散笔记--外键_MySQL

来源:动视网 责编:小采 时间:2020-11-09 17:55:06
文档

MySQL零散笔记--外键_MySQL

MySQL零散笔记--外键_MySQL:Mysql外键 References: 《浅谈MySQL外键》《mysql创建外键关联》MySQL中“键”和“索引”的定义相同, 所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。//查看
推荐度:
导读MySQL零散笔记--外键_MySQL:Mysql外键 References: 《浅谈MySQL外键》《mysql创建外键关联》MySQL中“键”和“索引”的定义相同, 所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。//查看


怪不得我试着创建带外键的表的时候出错呢,原来是之前的表不是InnoDB类型,果断该表表的类型:

ALTER TABLE table-name TYPE=INNODB;

居然有Warning。 show warnings之后发现原来是 “The syntax 'TYPE=storage_engine' is deprecated and will be removed in MySQL 6.0. Please use 'ENGINE=storage_engine' instead” TYPE已经OUT啦~以后要用Engine了嗯

关于表类型(type/engine)的介绍,可以在这里找到:

《浅谈MySQL表类型》,《MySQL engine/type类型InnoDB/MYISAM/MERGE/BDB/HEAP的区别》

注意事项:

  • 关系中的所有表必须是innoDB表,在非InnoDB表中,MySQL将会忽略FOREIGN KEY…REFERENCES修饰符。
  • 用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
  • 在外键关系中,字段的数据类型必须相似,这对于大小和符号都必须匹配的整数类型尤其重要。
  • 即使表存在外键约束,MySQL还允许我们删除表,并且不会产生错误(即使这样做可能会破坏更早创建的外键)
  • 删除外键方法:

    ALTER TABLE table-name DROP FOREIGN KEY key-id;

    这里有一个概念,这个外键的id是啥玩意?我们可以通过SHOW CREATE TABLE 命令来获得key-id的值。

    /*
    显示建表结构语句,key-id为payroll_ibfk_1
    */
    show create table payroll /G
    /*
    *************************** 1. row ***************************
     Table: payroll
    Create Table: CREATE TABLE `payroll` (
     `id` int(5) NOT NULL,
     `emp_id` int(5) NOT NULL,
     `name` varchar(8) NOT NULL,
     `payroll` float(4,2) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `emp_id` (`emp_id`),
     CONSTRAINT `payroll_ibfk_1` FOREIGN KEY (`emp_id`) REFERENCES `employees` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
     
    */

    自动键更新和删除:

    MySQL可能通过向FOREIGN KEY…REFERENCES 修饰符添加一个ON DELETE或ON UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务。

    关键字含义
    CASCADE删除包含与已删除键值有参照关系的所有记录.就是删除外键记录
    SET NULL修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
    RESTRICT拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
    NO ACTION啥也不做

    请注意,通过 ON UPDATE 和ON DELETE规则,设置MySQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏。

    文档

    MySQL零散笔记--外键_MySQL

    MySQL零散笔记--外键_MySQL:Mysql外键 References: 《浅谈MySQL外键》《mysql创建外键关联》MySQL中“键”和“索引”的定义相同, 所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。//查看
    推荐度:
    标签: 笔记 mysql
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top