时间:2021-07-01 10:21:17 帮助过:19人阅读
外键的概念:
一个表的主键在另外一个表中出现,在另外一个表中称为外键
作用:表间的数据插入、更新的时候的一种约束
语法
[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;
删除外键:
mysql--外键学习
标签:arc 查看 product 出现 inno show 其他 lte 建立