外键约束
外键约束
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。一个表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)
);