首页 >

Mysql高并发 – 数据库 – 前端,mysql convert conv

mysql数据库查看编码,mysql 关闭用户连接,mysql中姓名如何设置,mysql 参数化查询 like,mysql视图 翻译,mysql convert convMysql高并发 - 数据库 - 前端,mysql convert conv

你说的这个,描述过于简单,无法判断具体情况。

不过,mysql默认的隔离级别是Repeatable read。会出现幻读。如果是Read commited,会出现不可重复读。

如下:

==============================================================

隔离级别 ————– 脏读 — 不可重复读 — 幻读

==============================================================

未提交读(Read uncommitted) 可能 可能 可能

已提交读(Read committed) 不可能 可能 可能

可重复读(Repeatable read) 不可能 不可能 可能

可串行化(Serializable ) 不可能 不可能 不可能

==============================================================

什么是不可重复读呢?

在一个事务中,第一次读和第二次,有可能读到的同一条数据不一致。

比如:

begin

select name from b where col=5;

比如结果为:xiaoli

update b set info=’abc’ where col=5 and name=’xiaoli’;

大家并没有修改,col=5的name字段,但是再次读这条数据的时候

select name from b where col=5;

这里结果,可能是’zhangsan’。

commit

为什么这样呢?当你这个事务在执行的过程中,其他事务提交了一个update,修改了col=5这条数据。

什么是幻读呢?就是在一个事务中,已经对符合条件的数据进行了变更,但是提交前再次读取的时候,还会有满足要求的数据,因为在你的事务过程中,有其他的事务进行了新数据的提交,导致你又出现了满足条件的数据。

比如:

begin

select count(*) from b where col=5;

比如一共三条

update b set col=10 where col=5;

提示已经更改了3行数据。

这时候已经修改但是没有提交,

select count(*) from b where col=5;

发现,又出现了一条。

commit

就会发现怎么还有一条没有更新到呢?

这就是幻读。

如果你非要解决这个问题的话,set global transaction isolation level serializable;

这种情况下,偶在一个事务中执行的时候,其他事务只能等待。哪怕偶只执行了一个select语句。

但是这种级别,基本上谈不上高并发,也高并发不起来。因此一般生产只能在高并发和事务上做一个平衡。

不知道你说的是不是这个问题,这种问题需要程序去配合当前的事务级别。


Mysql高并发 - 数据库 - 前端,mysql convert conv
  • oracle数据文件太大 - 数据库 - 前端|
  • oracle数据文件太大 - 数据库 - 前端| | oracle数据文件太大 - 数据库 - 前端| ...

    Mysql高并发 - 数据库 - 前端,mysql convert conv
  • 水晶滴胶可不可以用AB胶代替 - 数据库 - 前端|
  • 水晶滴胶可不可以用AB胶代替 - 数据库 - 前端| | 水晶滴胶可不可以用AB胶代替 - 数据库 - 前端| ...

    Mysql高并发 - 数据库 - 前端,mysql convert conv
  • 东北大学软件学院怎么样 - 数据库 - 前端|
  • 东北大学软件学院怎么样 - 数据库 - 前端| | 东北大学软件学院怎么样 - 数据库 - 前端| ...