外键
把分散在多个不同表里面的数据查询出来的操作,就是多表查询
把两个表连接:使用外键(foreign key)和连接(join)
外键在表创建的阶段定义也可以通过修改表定义,连接在查询字段把相同意义的字段连接起来
外键就是从表中用来引用主表中数据的公共字段
外键约束必须在从表中定义 指明哪个是外键字段以及外键字段所引用的主表中的主键字段
创建从表,定义外键
create table demo.importdetails(listnum int,itenum int,quantity decimal(10,3),importprice decimal(10,2),importvalue decimal(10,2),constraint fk_importdetails_importhead foreign key (listnum) referencs importhead (listnum);
查询外键
select constraint_name,table_name,column_name,referenced_table_name,referenced_column_name from information_schema.key_column_usage where constraint_name='fk_importdetails_importhead';
连接查询
将表关联起来之后,进行连接查询
有两种连接方式 内连接和外连接
内连接表示查询结果只返回符合连接条件的记录,较常用
外连接表示查询结果返回某一个表中的所有记录,以及另外一个表中满组连接条件的记录
内连接
join inner join cross join都表示内连接
select a.price,a.transdate,b.membername from demo.tans as a join demo.membermaster as b on (a.carno=b.carno);
外连接
包括左连接和右连接
左连接 left join 返回左边表中所有的记录以及右表中符合所有连接条件的记录
select a.price,a.transdate,b.membername from demo.tans as a left join demo.membermaster as b on (a.carno=b.carno);
右连接 right join 返回右边表中所有的记录以及左表中符合所有连接条件的记录
select a.price,a.transdate,b.membername from demo.tans as a right join demo.membermaster as b on (a.carno=b.carno);
定义外键约束可以防止数据的缺失 避免出现误删的情况 提高系统的可靠性 确保从表中数据引用的主表数据不会删除,保证两个表的一致性
但是外键约束消耗系统资源 对于大并发的SQL操作可能不合适
如果不能使用外键约束,可以在应用层增加确保数据完整性的功能模块,比如删除主表记录时,增加检查从表中使用应用了这条记录的功能,如果应用了,就不允许删除,保持数据的一致性