免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4115 | 回复: 7
打印 上一主题 下一主题

请教mysql中innodb型数据表如何行锁定。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-03 08:25 |只看该作者 |倒序浏览
能否举例告诉。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-09-04 12:14 |只看该作者

请教mysql中innodb型数据表如何行锁定。

呵呵。自动锁定。
InnoDB 中的隔离级详细描述:

READ UNCOMMITTED 这通常称为 'dirty read':non-locking SELECTs 的执行使我们不会看到一个记录的可能更早的版本;因而在这个隔离度下是非 'consistent' reads;另外,这级隔离的运作如同 READ COMMITTED。
READ COMMITTED 有些类似 Oracle 的隔离级。所有 SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MODE 语句只锁定索引记录,而不锁定之前的间隙,因而允许在锁定的记录后自由地插入新记录。以一个唯一地搜索条件使用一个唯一索引(unique index)的 UPDATE 和 DELETE,仅仅只锁定所找到的索引记录,而不锁定该索引之前的间隙。但是在范围型的 UPDATE and DELETE 中,InnoDB 必须设置 next-key 或 gap locks 来阻塞其它用户对范围内的空隙插入。 自从为了 MySQL 进行复制(replication)与恢复(recovery)工作'phantom rows'必须被阻塞以来,这就是必须的了。Consistent reads 运作方式与 Oracle 有点类似: 每一个 consistent read,甚至是同一个事务中的,均设置并作用它自己的最新快照。
REPEATABLE READ 这是 InnoDB 默认的事务隔离级。. SELECT ... FOR UPDATE, SELECT ... LOCK IN SHARE MODE, UPDATE, 和 DELETE ,这些以唯一条件搜索唯一索引的,只锁定所找到的索引记录,而不锁定该索引之前的间隙。 否则这些操作将使用 next-key 锁定,以 next-key 和 gap locks 锁定找到的索引范围,并阻塞其它用户的新建插入。在 consistent reads 中,与前一个隔离级相比这是一个重要的差别: 在这一级中,同一事务中所有的 consistent reads 均读取第一次读取时已确定的快照。这个约定就意味着如果在同一事务中发出几个无格式(plain)的 SELECTs ,这些 SELECTs 的相互关系是一致的。
SERIALIZABLE 这一级与上一级相似,只是无格式(plain)的 SELECTs 被隐含地转换为 SELECT ... LOCK IN SHARE MODE。

如:
SELECT * FROM PARENT WHERE NAME = 'Jones' LOCK IN SHARE MODE;

论坛徽章:
0
3 [报告]
发表于 2004-09-04 20:38 |只看该作者

请教mysql中innodb型数据表如何行锁定。

再请问。如何解除锁定.如何判断某行是否锁定?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-09-05 11:03 |只看该作者

请教mysql中innodb型数据表如何行锁定。

事务完成后自动解除锁定.

可以通过下列语句查询全局和当前会话的事务隔离级:
SELECT @@global.tx_isolation;
SELECT @@tx_isolation;

论坛徽章:
0
5 [报告]
发表于 2004-09-05 11:23 |只看该作者

请教mysql中innodb型数据表如何行锁定。

假如我有一个表。里面的某条记录如果被A正在update,假如B这个时候也选中这个记录进行update我不想让B的update在A的update结束后执行

。而是某条记录在被修改的时候,程序通过判断该记录已经被锁定。B就不能操作这个记录(update,delete)。应该如何做?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-09-05 14:06 |只看该作者

请教mysql中innodb型数据表如何行锁定。

这样的话我就不知道了.
也许你只能去问计算机了.

我想,如果你能知道某条记录正被锁定的话,那就可能是个死锁了.

论坛徽章:
0
7 [报告]
发表于 2004-09-06 08:15 |只看该作者

请教mysql中innodb型数据表如何行锁定。

再请问,我的程序需要实现如下功能。既然锁定不能满足我的要求,怎么做呢?
我的表需要被n个用户同时使用,但是其中的某条记录被一个用户选中以后别人就不能再选用。这个用户在选中这个记录何更新这个记录之间有一段时间。如何确保在这段时间内别的用户不能占用这个记录?这个如何做到?

论坛徽章:
0
8 [报告]
发表于 2004-09-07 09:11 |只看该作者

请教mysql中innodb型数据表如何行锁定。

up
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP