数据库隔离级别

哎我这个笨脑子 ,昨天才看的数据库隔离级别今天早上就啥也记不起来了,还是记一下吧
首先说一下数据库的四大特性

  • 原子型

  • 隔离性:隔离性是指当多个用户并发访问数据库时,比如同时访问一张表,数据库每一个用户开启的事务,不能被其他事务所做的操作干扰,多个并发事务之间,应当相互隔离。
    例如同时有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)用到隔离性


上我复制的链接嘻嘻嘻
带例子的隔离级别
读取的优缺点

最后都是自己的理解 有误请指正
又是努力的一天加油啊

笔芯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值