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 外键名;

浙公网安备 33010602011771号