A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李皓321 初级黑马   /  2018-5-9 16:04  /  483 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

day08 MYSQL多表

1,多表约束
        外键约束:用来保证数据完整性(多表之间)。
2,表与表之间的关系
  • 一对多的关系
                  在多的一方创建外键指向一的一方的主键
  • 多对多的关系
                  需要创建中间表,中间表至少两个字段,分别作为外键指向多对多
                  双方的主键(中间表可以添加别的属性字段)。
  • 一对一的关系(很少用,一般一对一可以写在一个表中)
     唯一外键对应
                 假设是一对多,在多的一方创建外键指向一的一方的主键,将外
                 键设置为unique。
     主键对应
                 将两个表的主键建立对应关系即可。
3,多表查询分类:
  • 交叉链接(cross  join)(用的少)
                     :查询到的是两个表的笛卡尔积。
                      语法:
                              select * from  表1 cross join  表2;       
                              select * from 表1,表2;
  • 内连接: inner join (inner 可以省略)
                  显示内连接:在SQL中显示的调用inner join 关键字
                         语法:select  * from 表1  inner join 表2 on 关联条件
               隐式内连接:在SQl中没有调用inner join 关键字
                         语法:select * from 表1,表2 where 关联条件
  • 外连接:outer join(outer可以省略)
                  左外连接:
                              语法:select* from 表1 left outer join 表2 on 关联条件
               右外连接:
                              语法:select * from 表1 right outer join 表2 on 关联条件
  • 子查询:一个查询语句条件需要依赖另一个查询语句的结果。
      
带in的子查询:    ---在条件范围内
    select*from classes where cid in (select cno from student where birthday>'1991-01-01');
带exists的子查询:---if条件判断,子句为true,执行前边
    select*from classes where exists (select cno from student where birthday>'1991-01-01');
带any的子查询:   ---大于任意的就是大于最小值
    select * from classes where cid >any (select cno from student);
带all的子查询:   ---大于所有的就是大于最大值
    select*from classes where cid > all (select cno from student);






4,事务
  • 概述:指定是逻辑上的一组操作,组成这组操作的各个逻辑单位,要么全部
               失败。
       开启事务:start transaction;   
        提交事务:commit;
        回滚事务:rollback;
  •   事务特性:
                1,原子性:事务不可分割,组成事务的各个逻辑单元不可分割。
             2,一致性:事务执行的前后,数据完整性爆出一致。
             3,隔离性:事务执行不应该受到其他事务的干扰。
             4,持久性:事务一旦结束,数据就持久化到数据库中。
  • 事务如果不考虑隔离性容易引发的一些安全问题:
1,脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致。
2,不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致
3,虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
  • 设置事务等级解决这些问题(事务的隔离级别):
  • readuncommitted : 脏读,不可重复读,虚读都有可能发生
  • readcommitted:避免脏读,但是不可重复读和虚读有可能发生
  • repeatable  read : 避免脏读和不可重复读,但是虚读有可能发生。       
  • serializable:避免脏读,不可重复读,虚读。        

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马