码迷,mamicode.com
首页 > 数据库 > 详细

mysql--外键学习

时间:2020-04-01 17:57:04      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:arc   查看   product   出现   inno   show   其他   lte   建立   

外键的使用

  • 外键的概念:

    一个表的主键在另外一个表中出现,在另外一个表中称为外键

  • 作用:表间的数据插入、更新的时候的一种约束

  • 语法

    [CONSTRAINT constraint_name]
    FOREIGN KEY [foreign_key_name] (columns)
    REFERENCES parent_table(columns)
    [ON DELETE action]
    [ON UPDATE action`CONSTRAINT`]
    
    1. CONSTRAINT子句允许您为外键约束定义约束名称。如果省略它,MySQL将自动生成一个名称 。
    2. FOREIGN KEY子句指定子表中引用父表中主键列的列。您可以在FOREIGN KEY子句后放置一个外键名称,或者让MySQL为您创建一个名称。 请注意,MySQL会自动创建一个具有foreign_key_name名称的索引。
    3. REFERENCES子句指定父表及其子表中列的引用。 在FOREIGN KEYREFERENCES中指定的子表和父表中的列数必须相同。
    4. ON DELETE子句允许定义当父表中的记录被删除时,子表的记录怎样执行操作。如果省略ON DELETE子句并删除父表中的记录,则MySQL将拒绝删除子表中相关联的数据。此外,MySQL还提供了一些操作,以便您可以使用其他选项,例如on delete cascade,当删除父表中的记录时,MySQL可以删除子表中引用父表中记录的记录。 如果您不希望删除子表中的相关记录,请改用ON DELETE SET NULL操作。当父表中的记录被删除时,MySQL会将子表中的外键列值设置为NULL,条件是子表中的外键列必须接受NULL值。 请注意,如果使用ON DELETE NO ACTIONON DELETE RESTRICT操作,MySQL将拒绝删除。
    5. ON UPDATE子句允许指定在父表中的行更新时,子表中的行会怎样执行操作。当父表中的行被更新时,可以省略ON UPDATE子句让MySQL拒绝对子表中的行的任何更新ON UPDATE CASCADE操作允许您执行交叉表更新,并且当更新父表中的行时,ON UPDATE SET NULL操作会将子表中行中的值重置为NULL值。 ON UPDATE NO ACTIONUPDATE RESTRICT操作拒绝任何更新。
  • 创建外键:

    在MySQL中,InnoDB存储引擎支持外键,因此您必须创建InnoDB表才能使用外键约束。

    • 已经存在的表建立外键:

      ALTER TABLE products
      ADD FOREIGN KEY fk_vendor(vdr_id)
      REFERENCES vendors(vdr_id)
      ON DELETE NO ACTION # 允许删除
      ON UPDATE CASCADE; # 不允许更新
      
    • 创建表的时候建立外键

      CREATE TABLE products(
         prd_id int not null auto_increment primary key,
         prd_name varchar(355) not null,
         prd_price decimal,
         cat_id int not null,
         FOREIGN KEY fk_cat(cat_id)
         REFERENCES categories(cat_id)
         ON UPDATE CASCADE # 允许更新
         ON DELETE RESTRICT # 不允许删除
      )ENGINE=InnoDB;
      
  • 删除外键:

    • 查看外键名称: show create table 表名;
    • alter table 表名 drop foreign key 外键名;

mysql--外键学习

标签:arc   查看   product   出现   inno   show   其他   lte   建立   

原文地址:https://www.cnblogs.com/Hhhighway/p/12614147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!