MySQL -- 外键约束

MySQL – 外键约束


外键

  外键是一种用来在父表和子表间建立联系的一种类型。外键有助于保持数据的一致性和完整性。外键一旦被定义,就不允许删除在另一个表中具有关联关系的行。

外键约束

  MySQL的InnoDB引擎支持外键约束,其语法如下:

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

  方括号里的是可选项,[index_name]即外键的名字,除非在子表中明确定义了该名字,否则将会按照如下规则进行自动隐式命名:

  • 如果定义了CONSTRAINT [symbol],那么其名字将被使用,否则FOREIGN KEY index_name将被使用
  • 如果CONSTRAINT [symbol]FOREIGN KEY index_name都没有给出定义,那么外键引用的所在表的名字将会被作为外键名字的一部分来使用。

官方给出的例子:

CREATE TABLE product ( category INT NOT NULL, id INT NOT NULL, price DECIMAL, PRIMARY KEY(category, id) ) ENGINE=INNODB;

CREATE TABLE customer ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB;

CREATE TABLE product_order ( no INT NOT NULL AUTO_INCREMENT, product_category INT NOT NULL, product_id INT NOT NULL, customer_id INT NOT NULL, PRIMARY KEY(no), INDEX (product_category, product_id), INDEX (customer_id), FOREIGN KEY (product_category, product_id) REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY (customer_id) REFERENCES customer(id) ) ENGINE=INNODB;

新增外键:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

删除外键:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务