1、外键是什么
定义: 一张表中的非主键字段指向了另一张表中的主键,称之为外键。
一张表可以有多个外键,但是表之间不能跨引擎。只有 InnoDB引擎才支持外键。
2、外键的作用
外键的作用:保持数据的一致性、完整性。具体体现在以下两个方面:
2.1 阻止执行
从表插入新行,其外键值不是主表的主键值便阻止插入
从表修改外键值,新值不是主表的主键值便阻止修改
主表删除行,其主键值在从表里存在便阻止删除(即必须先删除从表的相关行,才能删除主表行)
主表修改主键值,旧值在从表里存在便阻止修改(即必须先删除从表的相关行)
2.2 级联执行
主表删除行,连带从表的相关行一起删除
主表修改主键值,连带从表相关行的外键值一起修改
3、如何创建外键
首先,先创建主表Vendors商品供应商表,主键字段为 vend_id 供应商id
-- 供应商列表
CREATE TABLE Vendors (
-- 供应商ID:主键列,自增长
vend_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '供应商ID',
-- 供应商名:可变字符,非空
vend_name VARCHAR (30) NOT NULL COMMENT '供应商名',
-- 供应商地址
vend_address VARCHAR (100) NOT NULL COMMENT '地址',
-- 供应商城市
vend_city VARCHAR (20) NOT NULL COMMENT '城市',
-- 供应商州
vend_state VARCHAR (20) NOT NULL COMMENT '州',
-- 供应商邮编
vend_zip VARCHAR (20) NOT NULL COMMENT '邮编',
-- 供应商国家
vend_country VARCHAR (20) NOT NULL COMMENT '国家'
);
然后,创建从表 Products产品表,设置从表的 vend_id 字段 指向 主表的 vend_id 主键字段
-- 产品目录表
CREATE TABLE Products (
-- 产品ID:主键列,自增长
prod_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- 供应商ID:外键
vend_id INT NOT NULL COMMENT '供应商ID',
-- 产品名
prod_name VARCHAR (30) NOT NULL COMMENT '产品名',
-- 产品价格
prod_price DOUBLE NOT NULL COMMENT '产品价格',
-- 产品描述
prod_desc VARCHAR (100) COMMENT '产品描述',
FOREIGN KEY (vend_id) REFERENCES Vendors (vend_id)
);