美文网首页数据库
mysql创建外键约束

mysql创建外键约束

作者: 陆_志东 | 来源:发表于2018-09-07 10:09 被阅读0次

    语法:

    foregin key(当前表字段) references 父表(父表字段) [ON DELETE reference_option] [ON UPDATE reference_option]
    
    reference_option 选项:
    CASCADE: 从父表中删除或者更新对应的行,当前子表同时删除或者更新对应的行
    SET NULL: 从父表中删除或者更新对应行,当前子表同时将外键列设置为NULL,如果子表外键字段设置了NOT NULL,还需要设置DEFAULT,否则会出错
    NO ACTION: InnoDB拒绝删除或者更新父表,对父表的外键字段拒绝操作,这意味着删除父表中的行也会失败
    RESTRICT: 拒绝删除或者更新父表
    SET DEFAULT: InnoDB目前不支持。
    

    外键约束常用的两种选项

    • 父表更新同时更新子表,父表删除的时候如果子表不存在对应的数据删除成功,如果存在对应数据,删除失败.
    ON UPDATE CASCADE ON DELETE RESTRICT;
    
    • 父表更新同时更新子表,父表删除子表的数据也删除.
    ON UPDATE CASCADE ON DELETE CASCADE
    

    没有创建mysql表的时候创建外键约束

    首先创建主表Class

    create table Class(
      id int auto_increment primary key,
      name varchar(6)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    

    再创建字表students

    create table students(
      id int auto_increment primary key,
      name varchar(6),
      class_id int,
      foreign key(class_id) references Class(id) ON UPDATE CASCADE ON DELETE CASCADE
    )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    

    这样就添加了外键约束,每个同学都会引用一个班级.要注意删除的时候需要先删除拥有外键约束的子表

    已创建表添加外键约束

    alter table 子表的数据表名 add foreign key(子表的外键名称) references 父表的数据表名称(父表的主键名称);
    alter table students add foreign key(class_id) reference Class(id) ON UPDATE CASCADE ON DELETE CASCADE
    

    相关文章

      网友评论

        本文标题:mysql创建外键约束

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