mysql--外键学习
外键的使用
-
外键的概念:
一个表的主键在另外一个表中出现,在另外一个表中称为外键
-
作用:表间的数据插入、更新的时候的一种约束
-
语法
[CONSTRAINT constraint_name] FOREIGN KEY [foreign_key_name] (columns) REFERENCES parent_table(columns) [ON DELETE action] [ON UPDATE action`CONSTRAINT`]
CONSTRAINT
子句允许您为外键约束定义约束名称。如果省略它,MySQL将自动生成一个名称 。FOREIGN KEY
子句指定子表中引用父表中主键列的列。您可以在FOREIGN KEY
子句后放置一个外键名称,或者让MySQL为您创建一个名称。 请注意,MySQL会自动创建一个具有foreign_key_name
名称的索引。REFERENCES
子句指定父表及其子表中列的引用。 在FOREIGN KEY
和REFERENCES
中指定的子表和父表中的列数必须相同。ON DELETE
子句允许定义当父表中的记录被删除时,子表的记录怎样执行操作。如果省略ON DELETE
子句并删除父表中的记录,则MySQL将拒绝删除子表中相关联的数据。此外,MySQL还提供了一些操作,以便您可以使用其他选项,例如on delete cascade,当删除父表中的记录时,MySQL可以删除子表中引用父表中记录的记录。 如果您不希望删除子表中的相关记录,请改用ON DELETE SET NULL
操作。当父表中的记录被删除时,MySQL会将子表中的外键列值设置为NULL
,条件是子表中的外键列必须接受NULL
值。 请注意,如果使用ON DELETE NO ACTION
或ON DELETE RESTRICT
操作,MySQL将拒绝删除。ON UPDATE
子句允许指定在父表中的行更新时,子表中的行会怎样执行操作。当父表中的行被更新时,可以省略ON UPDATE
子句让MySQL拒绝对子表中的行的任何更新。ON UPDATE CASCADE
操作允许您执行交叉表更新,并且当更新父表中的行时,ON UPDATE SET NULL
操作会将子表中行中的值重置为NULL
值。ON UPDATE NO ACTION
或UPDATE 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 外键名;