关于MYSQL锁定与并发处理

笑天居士 2008-02-21 01:19:32
分别说明对于非事务表普通引擎和InnoDB引擎两种情况下,发出一个长时间的查询的同时,可以进行插入或更新吗?如果可以的话,查询会查询到最新的数据吗?(假设查询没结束,但是插入或更新已结束),分别用mysql_store_result和ysql_use_result两种不同的方式来查询,是不是结果不同呢
...全文
1585 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leecyz 2012-03-24
  • 打赏
  • 举报
回复
很早的帖子,很多人说得都不太准备,对我帮助还是挺大的。
懒得去死 2008-02-28
  • 打赏
  • 举报
回复
关于FOR UPDATE 的意义 可以详细见我的BLOG
http://blog.chinaunix.net/u/29134/showart_478439.html
mathematician 2008-02-27
  • 打赏
  • 举报
回复
呵呵,这个问题,你只要记住一点:查询以后提交的不看。你执行了查询,可能查询需要的时间很长,在这个过程中其他用户提交了如update,insert 等操作,你的查询不会去看,虽然在其他用户看来他们的数据已经成功更新了。

多说一句,实际上,你的查询遇到这种情况,他是去回退段读快照中的数据,而非数据表中现在的数据。
liuyann 2008-02-27
  • 打赏
  • 举报
回复

理解的对
== 思想重于技巧 ==
笑天居士 2008-02-27
  • 打赏
  • 举报
回复
我是初学MYSQL,所以对比其它DB,我有些不懂的地方

我仔细看了看想着资料,我来回答我的问题
普通的select(没有加lock in share mode或for update)在MyISAM和InnoDB两种引擎下,都不会锁表或锁行的
对于MyISAM引擎,select语句加lock in share mode或for update是没有意义的,MyISAM必须用lock table来锁表操作
对于MyISAM引擎,update,insert语句会自动锁表

普通的select也查询不到查询过程中,另外用户更新或插入的数据
对于MyISAM可以锁表,限制在查询的同时,其它人做修改或插入
对于InnoDB可以起事务锁定行或改变隔离级别,防止在查询的过程中其它人修改或插入

不知道理解的对不对
BILearner 2008-02-26
  • 打赏
  • 举报
回复
SELECT还是会加锁的,如果你在更新,SELECT也查询不出,你只要在后面加个NOLOCK就行了!这样就可以边更新,边查询到记录!
懒得去死 2008-02-26
  • 打赏
  • 举报
回复
select ... for update 或者 in share mode 会加锁。
笑天居士 2008-02-26
  • 打赏
  • 举报
回复
太专业了,听不太懂

直接一点,就是如果一用户正读到某一条记录,恰恰在这同时有另一用户想改这条记录,让不让修改呢?

我指的是INNODB引擎的默认配置下,SQL语句中不加任何的锁模式指定


还有,我在SELECT时,是没有起事务的,这时SELECT也会加上共享锁吗?

yangxiao_jiang 2008-02-21
  • 打赏
  • 举报
回复
你看一下数据库原理,selece的时候,也会加读锁(共享锁)的。


DBMS通常提供了多种数据类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁类型决定的。基本的封锁类型有两种:排他锁(exclusive lock,简记为X锁)和共享锁(share lock简记为S锁)排他锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A 上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

共享锁又称为读锁。若事务T对数据对象A加上S锁,则其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
笑天居士 2008-02-21
  • 打赏
  • 举报
回复
我看过一个资料,这样说的:

在所有这些情况下,客户机程序都不能很快检索结果集的所有行,它限制了服务器,并对其他客户机程序产生负面的影响,因为检索数据的表在查询过程中是读锁定的。要更新表的客户机或要插入行的任何客户机程序都被阻塞。


以上这句话怎样理解?为何会读负定,读表也还会锁定吗?
笑天居士 2008-02-21
  • 打赏
  • 举报
回复
自我分析,查询语句应该是不会加锁的,至少Informix,oracle等DB是不加锁的

MySql查询会加锁吗?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧