外键约束

外键约束

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。一个表A的主键id,在另外一个表B中出现,就说A是表B的一个外键。

添加约束

-- 创建表时添加外键约束
CREATE TABLE 表名(
    列名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
-- 建完表后再添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

删除约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

操作实例

外键的操作

修改goods表,给brand_id和cate_id添加外键约束

ALTER TABLE goods ADD FOREIGN KEY ( cate_id ) REFERENCES goods_cates ( id );
ALTER TABLE goods ADD FOREIGN KEY ( brand_id ) REFERENCES goods_brands ( id );

防止在goods商品信息中添加不存在的品牌和分类id。

外键约束会降低数据插入和删除的效率。在频繁插入和删除的表中不建议使用外键。

如何取消已经存在的外键?

-- 查询表中的外键约束
SHOW CREATE TABLE goods;

-- 获取名称之后就可以根据名称来删除外键约束
ALTER TABLE goods DROP FOREIGN KEY goods_ibfk_1;
ALTER TABLE goods DROP FOREIGN KEY goods_ibfk_2;

在创建数据表时设置外键约束(不常用)

CREATE TABLE goods (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
	NAME VARCHAR ( 150 ) NOT NULL,
	cate_name VARCHAR ( 40 ) NOT NULL,
	brand_name VARCHAR ( 40 ) NOT NULL,
	price DECIMAL ( 10, 3 ) NOT NULL DEFAULT 0,
	is_show BIT NOT NULL DEFAULT 1,
	is_saleoff BIT NOT NULL DEFAULT 0,

	FOREIGN KEY(cate_id) REFERENCES goods_cates(id),
	FOREIGN KEY(brand_id) REFERENCES goods_brands(id)
);