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

作者: supa同学 | 来源:发表于2018-02-22 21:13 被阅读1次

外键约束的要求

  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相同

相关文章

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

    外键约束的要求 父表和子表必须使用相同的储存引擎,而且禁止使用临时表 数据表的储存引擎只能为InnoDB: 外键列...

  • MySQL的简单学习(二)-多表查询

    外键 设置外键 如果是创建表添加外键约束,我们需要在创建表的()最后添加如下语句 FOREIGN KEY (bra...

  • SQL建表,SQLLDR导入数据,DML语句

    建表语句 创建带主键约束的表(primary key) 创建带外键约束的表(foreing key) 创建联合主键...

  • python-Flask_SQLAlchemy(3)

    外键约束 [TOC] 创建外键约束表结构 有两个表,用户表(users)与文章表(article)。其中文章表中的...

  • mysql创建外键约束

    语法: 外键约束常用的两种选项 父表更新同时更新子表,父表删除的时候如果子表不存在对应的数据删除成功,如果存在对应...

  • mysql 常用操作

    导出数据: 导入数据: 查看外键约束: 全部的表: 去除约束: 添加约束: 主键: 约束不能更改,只能先移除再创建...

  • 5 MySQL 命令

    [Toc] 1 禁用外键约束 禁用外键约束:SET FOREIGN_KEY_CHECKS=0 启用外键约束:set...

  • mysql-删除关联表

    1.删除表的外键约束 外键是一个特殊字段,其将某一个表与其父表建立关联关系。在创建表的时候,外键约束就已经设定好了...

  • django外键约束——on_delete相关的问题

    在最新的django框架中,models设置外键约束时,on_delete是必填项,所以创建外键时如何设置on_d...

  • 外键约束

    外键约束主要包含添加外键和删除外键。 1、外键约束-添加外键 create table 表名(字段名 数据类型,....

网友评论

    本文标题:mysql_外键约束的要求以及创建步骤

    本文链接:https://www.haomeiwen.com/subject/kpoztftx.html