您的位置:首页 > 数据库 > MySQL

MySQL -- 外键约束

2018-03-25 16:12 330 查看

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息