事务是什么?
就这个问题,官方给出的解释长篇大论,当初学的时候看的也很懵逼,我就不去copy官方解释了,下面是我的个人理解:
直接从事务的特性去解释可能比较直观
原子性 | 一个事务也就是一组sql语句,我们把它看成一个不能在分的个体,(什么东西不能拆分,那就是原子,其实也很好理解)要么同时成功,要么同时失败; |
一致性 | 数据再更改前后,数据都是一样的 |
隔离性 | 事务与事务之间是相互独立的,数据要是隔离的,这里就有点类似于java里面的多线程,一个线程看成一个事务,他们的共同变量就类似与数据库里的表。 |
持久性 | 就是每次事务完成以后都应该被持久化到硬盘上面 |
第二问题,是针对于事务的隔离性而言的,事务的隔离级别?
要搞清楚这个,首先要了解,多个事务同事执行时会出现哪几种问题,就类似与java多线程并发去访问同一个静态变量一样,
第一个问题,脏读,什么事脏读呢?
就是有AB两个事务同时在执行,A事务读取到了B事务没有提交数据;
例子:
用户表
CREATE TABLE `user` (
`userId` int NOT NULL COMMENT '用户id',
'userName` varchar(20) COMMENT '用户名称',
`Money` int DEFAULT NULL COMMENT '用户金额',
PRIMARY KEY (`userId`)
) ;
插入两条记录作为测试
insert into user values(1,'张三',1000),(2,'李四',1000);
模拟一下脏读情况