MySQL7
数据库的备份与还原
1 命令行
语法
备份 mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
1 登录数据库
2 创建数据库
3 使用数据库
4 执行文件 source 文件路径
2 图形化工具
多表查询
查询语法
select
列名列表
from
表名列表
where...
多表查询的分类
1 内连接查询
1 隐式内连接:使用where条件删除无用的信息
select * from emp,dept where emp.dept_id=dept.id;
select
t1.name,
t1.gender,
t2.name
from
emp t1,dept t2
where
t1.dept_id=t2.id;
2 显式内连接
语法:select 字段列表 from 一个表名1 [inner] join 表名2 on 条件
select * from emp inner join dept on emp.dept.id=dept.id;
3 内连接查询注意:
1 从哪些表中查询数据
2 条件是什么
3 查询哪些字段
2 外连接查询
1 左外连接
语法: select 字段列表 from 表1 left [outer] join 表2 on 条件
select t1.* ,t2.name from emp t1 left join dept t2 on t1.dept_id=t2.id;
查询的是左表所有数据以及其交集部分
2 右外连接
语法: select 字段列表 from 表1 right [outer] join 表2 on 条件
查询的是右表所有数据以及其交集部分
3 子查询
概念:查询中嵌套查询,称嵌套查询为子查询
select * from emp where emp.salary=(select max(salary) from emp;);
子查询不同情况
1 子查询的结果是单行单列:
子查询可以作为条件,使用运算符去判断 >,<,>=,<=,=等
--查询员工工资小于平均工资的
select * from emp where emp.salary < (select avg(salary) from emp);
2 子查询的结果是多行单列的:
子查询可以作为条件,使用运算符in来判断
--查询财务部和市场部所有的员工信息
select * from emp where dept_id in(select id from dept where name = '财务部' or name = '市场部');
3 子查询的结果是多行多列的:
子查询可以作为一张虚拟表
--查询员工的入职日期是2011-11-11之后的员工信息和部门信息
select * from dept t1,(select * from emp where emp.join_date > '2011-11-11') t2
where t1.id=t2.dept_id;
事务
1事务的基本介绍
1 概念:
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
2 操作:
1 开启事务: start transaction;
2 回滚 rollback;
3 提交 commit;
4 MySQL数据库中事务默认自动提交
事务提交的两种方式
自动提交
一条DML(增删改)语句会自动提交一次事务
手动提交
Oracle数据库默认是手动提交
需要先开启事务,再提交
修改事务的默认提交方式
查看事务的默认提交方式
select @@autocommit;1代表自动提交,0代表手动提交
修改默认提交方式:set @@autocommit=0或1;
2事务的四大特征
1 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
2 持久性:如果事务一旦提交或者回滚,数据库会持久化的保存数据
3 隔离性:多个事务之间,相互独立
4 一致性:事务操作前后数据总量不变
3事务的隔离级别
概念:多个事务之间是隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别,就可以解决这些问题
存在问题:
· 1 脏读:一个事务,读取到另一个事务中没有提交的数据
2 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
3 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
隔离级别:
1 read uncommitted:读未提交
产生的问题:脏读,不可重复读,幻读
2 read committed:读已提交 (Oracle)
产生的问题:不可重复读,幻读
3 repeatable read:可重复读 (MySQL默认)
产生的问题:幻读
4 serializable:串行化
可以解决所有问题
隔离级别从小到大安全性越来越高,但是效率越来越低
数据库设置隔离级别:
set global transaction isolation level 级别字符串

浙公网安备 33010602011771号