Mysql的SQL语句优化和事务隔离级别

安装步骤

我的文章
https://blog.csdn.net/UnicornRe/article/details/117657298

mysql连接命令

mysql -uroot -p -h x.x.x.x -P 3306

备份:

mysqldump -h 地址 -u用户名 -p密码 otc_v1 >/x/x/backup.sql

优化

  1. 避免使用!=,<>
  2. 会用索引的符号
<<==>>=BETWEENIN,x%
  1. 避免判断null
  2. 避免使用or
select * from teacher where id=1 UNION all select * from teacher where id=2
# 使用UNION时,MySQL会把结果集中重复的记录删掉,而使用UNION ALLMySQL会把所有的记录返回,且效率高于UNION
  1. 避免前置%x,使用 x%
  2. 尽量用between代替in ,not in
  3. 避免在 ‘=’ 左边使用算数运算
  4. 联表查询
<!-- 方案 1
        select c.*,p.name parentName
        from sys_menus c left join sys_menus p
        on c.parentId=p.id
        -->
<!-- 方案 2 (推荐)-->
        select c.*,(
        select p.name
        from sys_menus p
        where c.parentId=p.id
        ) parentName
        from sys_menus c
# 联表举例
select 
teacher.name,(select teacher_class.class from teacher_class where teacher_class.teacherId=teacher.id) 
from teacher where teacher.id=1

事务4种特性和4种级别

特性

原子性(Atomicity):一个事务必须被视为一个不可分割的单元,对于其数据修改,要么全都执行,要么全都不执行
一致性(Consistency):数据库总是从一种状态切换到另一种状态,事务在完成时,必须使所有的数据保持一致的状态
隔离性(Isolation):由并发事务所做的修改必须与任何其他并发事务所做的修改隔离
持久性(Durablity):一旦事务提交,所做修改永久保存在数据库

隔离级别
1-4效率依次降低

1Read uncommitted (读未提交):最低级别,任何情况都无法保证
2Read committed (读已提交):可避免脏读的发生。oracle默认
3Repeatable read (可重复读):可避免脏读、不可重复读的发生。mysql默认
4Serializable (串行化):可避免脏读、不可重复读、幻读的发生
#设置级别
SET SESSION TX_ISOLATION='READ-COMMITTED';
BEGIN;
#事务内容...
commit;/rollback;

脏读&不可重复读&幻读

脏读

读取到其他事务未提交的数据

不可重复读

不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,
比如其他事务改了这批数据并提交了。通常针对数据**更新(UPDATE**操作。

幻读

幻读是针对数据**插入(INSERT**操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时
事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,
会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了
幻觉,这就叫幻读。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可——叹——落叶飘零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值