黑马程序员技术交流社区
标题:
[广州][原创]mysql 优化
[打印本页]
作者:
yqw_gz_java
时间:
2020-4-22 18:42
标题:
[广州][原创]mysql 优化
本帖最后由 yqw_gz_java 于 2020-4-22 18:52 编辑
一事务:什么是事物
数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元);
典型事务场景(转账):update user_account set balance = balance - 1000 where userID = 3;
update user_account set balance = balance +1000 where userID = 1;
mysql中如何开启事务:begin / start transaction -- 手工
commit / rollback -- 事务提交或回滚
set session autocommit = on/off; -- 设定事务是否自动开启JDBC 编程:
connection.setAutoCommit(boolean);
Spring 事务AOP编程:expression=execution(com.gpedu.dao.*.*(..))
事物的特性:
原子性(Atomicity)
最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚
一致性(Consistency)
事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则,不会因为出现系统意外等原因导致状态的不一致
隔离性(Isolation)
一个事务所操作的数据在提交之前,对其他事务的可见性设定(一般设定为不可见)
持久性(Durability)
事务所做的修改就会永久保存,不会因为系统意外导致数据的丢失
事物隔离级别
Read Uncommitted(未提交读) --未解决并发问题事务未提交对其他事务也是可见的,
脏读(dirty read)Read Committed(提交读) --解决脏读问题一个事务开始之后,只能看到自己提交的事务所做的修改,不可重复读(nonrepeatableread)
Repeatable Read (可重复读) --解决不可重复读问题在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题
Serializable(串行化) --解决所有问题最高的隔离级别,通过强制事务的串行执行
表锁,行锁
表锁与行锁的区别:
锁定粒度:表锁 > 行锁
加锁效率:表锁 > 行锁
冲突概率:表锁 > 行锁
并发性能:表锁 < 行锁
mysql innoDB锁类型
共享锁(行锁):Shared Locksl
排它锁(行锁):Exclusive Locksl
意向锁共享锁(表锁):Intention Shared Locksl
意向锁排它锁(表锁):Intention Exclusive Locksl
自增锁:AUTO-INC Locksl
记录锁 Record Locksl
间隙锁 Gap Locksl
临键锁 Next-key Locks
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2