mysql区没高手 - MS-SQL Server / 基础类
我觉得mysql和sqlserver有共同的地方:
有个问题是关于表的锁问题:
进程A 进程B
select * from user where id in lock share mode(共享锁)
update user set name='55' where id=1(此时锁住等待A)
update user set name='66' where id=1(这个时候会出现死锁)
更新成功
如果换成删除的话就不会出现死锁状态,B会等待A提交后删除
如果将select换为排他锁的话B会等待A提交后更新
书中解释是B由于无法获取共享锁所以放入队列,A此时update与队列的B的update冲突造成死锁,
我认为的是B应该在A提交后才进行更新操作,此时为什么并没有提交就会发生冲突呢?而select设为排他锁就不会
共享锁与排他锁还有什么原理呢?谢谢
如果是sql server,则参考下面的一些文章.
SQL code:
1 如何锁一个表的某一行
A 连接中执行
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from tablename with (rowlock) where id=3
waitfor delay '00:00:05'
commit tran
B连接中如果执行
update tablename set colname='10' where id=3 --则要等待5秒
update tablename set colname='10' where id<>3 --可立即执行
2 锁定数据库的一个表
相关问答:
现在有两张表:文章主表A(articleId,articleTitle),文章评论表B(commentId,articleId,commentTitle)
现在我想实现这样的功能:列出文章列表,其中每篇文章标题下面列出此文章的前2个文章评论,请问sql语句怎么写啊 ......
String sqlCount="select count(*) from usertable where username='"+
userName+"'";这句话 什么意思啊!
这句话输出出来就是
select count(*) from usertable where username='你的变量 ......
请教高手:
以下是数据库中的三条记录,英文为字段名称
id planname TaskBeginTime Status
329 2010年03 ......
求个vb中的sql语句的写法,次sql语句的用法是分页程序
我写的如下:其中A是用来接收每页显示的记录的条数,B是用来接收显示的当前的页面.
sqltext="select top A * from log where id not in(select top ( ......