社区
MySQL
帖子详情
关于MYSQL锁定与并发处理
笑天居士
2008-02-21 01:19:32
分别说明对于非事务表普通引擎和InnoDB引擎两种情况下,发出一个长时间的查询的同时,可以进行插入或更新吗?如果可以的话,查询会查询到最新的数据吗?(假设查询没结束,但是插入或更新已结束),分别用mysql_store_result和ysql_use_result两种不同的方式来查询,是不是结果不同呢
...全文
1585
11
打赏
收藏
关于MYSQL锁定与并发处理
分别说明对于非事务表普通引擎和InnoDB引擎两种情况下,发出一个长时间的查询的同时,可以进行插入或更新吗?如果可以的话,查询会查询到最新的数据吗?(假设查询没结束,但是插入或更新已结束),分别用mysql_store_result和ysql_use_result两种不同的方式来查询,是不是结果不同呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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查询会加锁吗?
mysql
锁定
库存_
mysql
处理
高
并发
,防止库存超卖
今天王总又给我们上了一课,其实
MySQL
处理
高
并发
,防止库存超卖的问题,在去年的时候,王总已经提过;但是很可惜,即使当时大家都听懂了,但是在现实开发中,还是没这方面的意识。今天就我的一些理解,整理一下这个问题,并希望以后这样的课程能多点。先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作...
MySQL
事务及
并发
控制
mysql
mvcc
并发
控制
MySQL
单机
并发
量_
mysql
百万
并发
量-
MySQL
集群能支持100万个
并发
请求吗
当然支持100万
并发
。 首先,我们必须做出决定,把阅读和写作分开。 然后,它取决于你需要分配多少个单元用于写作和阅读。 我的SQL集群不建议您使用它,因为有太多的错误。 所有这些都需要先进行压力测试。 业务不同,SQL写读也不同。 压力测试应根据具体业务进行。 受服务器配置和网络环境的限制,
MySQL
数据库支持的
并发
连接的最大数量为16384、实际服务器支持的
并发
连接的数量会更小。 主要决定因素:...
详解
MySQL
的
并发
控制
MySql
的事务、锁是不是搞不清楚?进来!给你讲明白!
MySQL
并发
控制
Mysql
并发
控制 无论何时,只要有多个查询需要在同一时刻修改数据,都会产生
并发
控制问题,
mysql
可以在两个层面进行
并发
控制:服务器层和存储引擎层。
mysql
通过加锁实现
并发
控制: 锁有两类: 读锁:共享锁,即一个读锁不会阻塞其它读锁,多个用户可同时读取同一个资源,而不互相干扰。 写锁:排他锁,即一个写锁会阻塞其它读写锁,在给定时间内,只有一个用户能执行写入。 锁粒度: 表级锁:
锁定
整张表 行级锁:
并发
程度更高,但维护较麻烦,会增加系统开销,易产生死锁。行级锁只能在存储引擎级别实现,MyISAM存
MySQL
56,679
社区成员
56,709
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章