MySQL多表(理论知识总结)

1. 多表关系
   外键    foreign key
   添加外键语法:    alter table 表名1 add foreign key(外键名称) references 表名2(主键名称)
2.三种表关系:
   一对多
       在多的一方建立外键 指向一方的主键        
   多对多
       建立中间表 存储外键分别指向其他表的主键
   一对一
       可以建立唯一 unique约束 让其中一张表的外键指向另一张表的主键(少见)
3.多表查询语法
   交叉连接查询: 查询出来的是两张表的每一条记录进行匹配的结果 会出现笛卡尔积
       select * from tb1 cross join tb2;
       select * from tb1 , tb2;
   内连接:
       select * from tb1 inner join tb2 on 条件; 显示内连接
       select * from tb1 , tb2 where 条件; 隐式内连接
   外连接:
       左外连接 select * from tb1 left outer join tb2 on 条件;        查询左表所有和两张表的共有部分
       右外连接 select * from tb1 right outer join tb2 on 条件;    查询右表所有和两张表的共有部分
4.子查询:    一条select语句的执行依赖于另一条select语句
   select * from 表名 in/exists/all/any (select *...)
5. 练习题计算企业每年营业额的增长率
SELECT * FROM annual_income a1,annual_income a2 WHERE a1.year=(a2.year+1);(按照要求找到两张表的关系)
SELECT * FROM annual_income a1 LEFT JOIN annual_income a2 ON a1.year=(a2.year+1);(查询第一张表和所有的)
SELECT a1.year,CONCAT(ROUND(IFNULL(((a1.zz-a2.zz)/a2.zz)*100,0),0),'%') 增长率 FROM annual_income a1 LEFT JOIN annual_income a2 ON a1.year=(a2.year+1);(最终的结果)
6 事务: 指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
   事务特性:
       原子性/一致性/隔离性/持久性
   如果不考虑事务的隔离级别 在进行操作时有可能出现问题:
       脏读/不可重复读/虚读
   事务可以设置的隔离级别:
       read uncommitted    读未提交
       read committed        读已提交
       repeatable read        可重复读
       serializable        串行化
       
   
posted @ 2019-08-02 08:21  梦如汐  阅读(218)  评论(0编辑  收藏  举报