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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

MySQL多表和事务

约束约束的作用
  • 约束是用来保证数据的完整性

单表约束
  • 主键约束
  • 唯一约束
  • 非空约束

多表约束
  • 外键约束

添加外键约束
alter table employee add foreign key (dno) references dept(did);
akter table employee modify dno int not null;表之间的关系
  • 一对多关系:在多的一方创建外键指向一的一方的主键
  • 多对多关系:需要创建中间表,中间表至少两个字段,分别作为外键指向多对多双方的主键
  • 一对一关系:

    • 唯一外键对应:假设是一对多,在多的一方创建外键指向一的一方的主键,将外键设置为unique
    • 主键对应:将两个表的主键建立对应关系即可.(该方法不可取,不在主键上设置其他的业务逻辑)


多表查询的分类连接查询
  • 交叉连接:cross join

    • 查询到的是两个表的笛卡尔积
    • 语法:



select * from tab1 cross join tab2;
select * from tab1,tab2;
  • 内连接:inner join(inner是可以省略的)

    • 显式内连接


    select * from tab1 inner join tab2 on 关联条件;
    • 隐式内连接:


    select * from tab1,tab2 where 关联条件;
  • 外连接:outer join(outer可以省略的)

    • 左外连接


    select * from tab1 left outer join tab2 on 关联条件;
    • 右外连接


    select * from tab1 right outer join tab2 on 关键条件;
子查询
  • 一个查询语句条件需要依赖另一个查询语句的结果

事务事务概述
  • 指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败.

MySQL中的事务管理
  • 开启事务:start transaction;
  • 提交事务:commit;
  • 回滚事务:rollback;

事务的特性(ACID特性)
  • 原子性:事务的不可分割,组成事务的各个逻辑单元不可分割
  • 一致性:事务执行的前后,数据完整性保持一致
  • 隔离性:事务执行不应该已收到其他事务的干扰
  • 持久性:事务一旦结束,数据就持久化到数据库中

事务的隔离级别安全问题
如果不考虑隔离性所引发的安全问题:
  • 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
  • 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次结果不一致
  • 虚读/幻读:一个事务读到了另一个事务已经提交的insert数据,导致多次查询结果不一致

解决这些安全性问题
设置事务的隔离级别:
  • read uncommitted:脏读,不可重复读,虚读都有可能发生
  • read committed:避免脏读.不可重复读和虚读有可能发生
  • repeatable read:避免脏读和不可重复读,虚读有可能发生
  • serializable:避免脏读,不可重复读,虚读

语法
  • 查看隔离级别:


select @@tx_isolation;
  • 设置隔离级别


SET SESSION TRANSACTION ISOLATION 隔离级别;

0 个回复

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