MySQL多表&事务

事务的基本概念
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
事务的操作
**事务的基本操作**
	开启事务: start transaction;
	回滚:rollback;
	提交:commit;
**事务的提交**
	自动提交
		MySQL中默认的是自动提交
		一条DML(增删改)语句会自动提交一次事务。
	手动提交
		 Oracle 数据库默认是手动提交事务
		需要先开启事务,再提交(每次修改语句都必须运行commit提交事务才能成功)
	修改提交方式
		查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交  0 代表手动提交
		修改默认提交方式: set @@autocommit = 0;
事务的四大特征(面试必考)
**1.原子性**
	是不可分割的最小操作单位,要么同时成功,要么同时失败
**2.持久性**
	当事务提交或回滚后,数据库会持久化的保存数据
**3.隔离性**
	多个事务之间。相互独立
**4.一致性**
	事务操作前后,数据总量不变
事务的隔离级别(了解)
**事务存在的问题**
	1. 脏读:一个事务,读取到另一个事务中没有提交的数据
	2. 不可重复读:在同一个事务中,两次读取到的数据不一样。
	3.幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
	隔离级别
		1. read uncommitted 读未提交
			产生的问题:脏读、不可重复读、幻读
		2. read committed 读已提交
			产生的问题:不可重复读、幻读
		3. repeatable read 可重复读
			产生的问题:幻读
		3.serialisable 串行化
			不产生任何问题,但是效率最低
内连接查询
**隐式内连接**
	直接逗号分割多表
		SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
显式内连接
	语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
		例如:SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
外连接查询
**左外连接查询**
	查询的是左表所有数据以及和右表有交集的数据
		语法: 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
**右外连接查询**
	查询的是右表所有数据以及和左表有交集的数据
		语法: 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;

子查询

个人理解:查询的嵌套,将一条查询语句查询出的数据当做条件传给另一条查询语句。

概念:查询中嵌套查询,称嵌套查询为子查询。

子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =

子查询可以作为条件,使用运算符in来判断

子查询可以作为一张虚拟表参与查询

mysql 手动两个事务分别提交 mysql多事务提交_mysql