哎我这个笨脑子 ,昨天才看的数据库隔离级别今天早上就啥也记不起来了,还是记一下吧
首先说一下数据库的四大特性
-
原子型
-
隔离性:隔离性是指当多个用户并发访问数据库时,比如同时访问一张表,数据库每一个用户开启的事务,不能被其他事务所做的操作干扰,多个并发事务之间,应当相互隔离。
例如同时有T1和T2两个并发事务,从T1角度来看,T2要不在T1执行之前就已经结束,要么在T1执行完成后才开始。将多个事务隔离开,每个事务都不能访问到其他事务操作过程中的状态。 -
一致性
-
持久性
好啦是不是看到隔离性了,对就是想的那样隔离性是有级别的 -
REPEATABLE READ Repeatable Read 可重复读 (MySql的默认隔离级别)
-
READ COMMITTED Read Committed 读取提交内容
-
READ UNCOMMITTED Read UnCommitted 读取未提交内容
-
SERIALIZABLE Serializable 可串行化:
这是数据库最高的隔离级别,这种级别下,事务“串行化顺序执行”,也就是一个一个排队执行。
优点: 这种级别下,“脏读”、“不可重复读”、“幻读”都可以被避免。
缺点: 执行效率奇差,性能开销也最大,所以基本没人会用。
查看全局和session会话的事务隔离级别以及设置
SELECT @@global.tx_isolation,@@tx_isolation;
REPEATABLE-READ; REPEATABLE-READ
范例: SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
具体设置: set global transaction isolation level read committed; //全局的
具体设置: set session transaction isolation level read committed; //当前会话
再来一个数据库锁
共享锁
由读表操作加上的锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排它锁,也就是说只能读不能写
排它锁
由写表操作加上的锁,加锁后其他用户不能获取该表或行的任何锁,典型是mysql事务
根据锁的范围,可以分为
表锁
给整张表加锁
行锁
给行数据加锁
SQL语言分为五大类:
DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
DQL(数据查询语言) - Select 查询语句不存在提交问题。
DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。
所以,只有当执行插入(insert)、更新(update)、删除(delete)这些种类的语句时才需要提交(commit)用到隔离性
最后都是自己的理解 有误请指正
又是努力的一天加油啊
笔芯