MySQL数据库外键使用
程序员文章站
2022-06-01 08:50:23
...
--5.1 向goods表里插入任意一条数据
insert into goods (name,cate_id,brand_id,price) values('联想固态硬盘',10,10,1200);
--5.2 添加外键约束 foreign key
-- alter table goods add foreign key (brand_id) references goods_brands(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);
-- 失败原因 ,因为'联想固态硬盘'这行的数据不满足外键约束 delete
-- delete from goods where name="联想固态硬盘";
delete from goods where id=22;
--5.3 创建表的同时设置外键 (注意 goods_cates 和 goods_brands 两个表必须事先存在)
create table goods(
id int primary key auto_increment not null,
name varchar(40) default '',
price decimal(5,2),
cate_id int unsigned,
brand_id int unsigned,
is_show bit default 1,
is_saleoff bit default 0,
foreign key(cate_id) references goods_cates(id),
foreign key(brand_id) references goods_brands(id)
);
--5.4 如何取消外键约束
alter table goods drop foreign key goods_ibfk_1;
alter table goods drop foreign key goods_ibfk_2;
-- 需要先获取外键约束名称,该名称系统会自动生成,可以通过查看表创建语句来获取名称
show create table goods ;
-- 获取名称之后就可以根据名称来删除外键约束
--alter table goods drop foreign key goods_ibfk_1;
--5.5 涉及外键的面试
在目前主流的数据库设计中,越来越少使用到外键约束
原因: 会极大的降低表更新的效率
如何替代 '通过外键约束实现数据有效性验证'
解决思想: 可在数据录入时验证(表示层,ui层),或者在业务层面(python代码)去验证,而不要数据库层面去验证。