mysql_外键约束的要求以及创建步骤

外键约束的要求

  1. 父表和子表必须使用相同的储存引擎,而且禁止使用临时表

  2. 数据表的储存引擎只能为InnoDB:

  3. 外键列(字段)和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符类型的字段的长度则可以不同

  4. 外键列(字段)和参照列(即外键列在另一个表中对应的主键列)必须创建索引,如果外键不存在索引(即外键约束)的话,MySQL将自动给外键列自动创建索引(外键约束)

步骤

  1. 设置储存引擎
   my.ini 设置储存引擎
   default-storage-engine=INNODB
  1. 创建两张数据表(例):
  CREATE TABLE provinces(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    proName VARCHAR(20) NOT NULL
  );

SHOW CREATE TABLE provinces; // 查看数据表创建详细信息

   CREATE TABLE users(
     id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     userName VARCHAR(10) NOT NULL,
     pid SMALLINT UNSIGNED,
     FOREIGN KEY (pid) REFERENCES provinces(id)
   );

如果 外键字段和参照列字段数据类型不同,会报1005错误

外键约束的操作:

  1. CASCADE:从父表删除或更新会自动删除或更新子表中匹配的行

  2. SET NULL:从父表删除或更新行,会设置子表中的外键列为NULL,但必须保证子表列没有指定NOT NULL

  3. RESTRICT:拒绝对父表的删除或更新操作(如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作,这个是ANSI SQL-92标准,从mysql4.0.8开始支持)

  4. NO ACTION:标准SQL的关键字,在mysql中与RESTRICT相同

    原文作者:supa同学
    原文地址: https://www.jianshu.com/p/4b9293f7c231
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞