mysql如何用事务和锁 锁住某一行数据,使得不允许两个用户同时读取一行数据!!

mysql如何用事务和锁 锁住某一行数据,使得不允许两个用户同时读取一行数据!!,第1张

1、在mysql数据库中如何锁定一行数据,保证不被其他的 *** 作影响。

2、从对数据的 *** 作类型分为读锁和写锁。从对数据 *** 作的粒度来分:表锁和行锁。

3、现在我们建立一个表来演示数据库的行锁讲解。

4、行锁基本演示如下图所示。

5、如果两个会话 *** 作的是不同的行,就不会互相阻塞了。

recordset的open语句后边的参数就可以控制

RS.OPEN SQL,CONN,A,B

A:

ADOPENFORWARDONLY(=0)

只读,且当前数据记录只能向下移动

ADOPENKEYSET(=1)

只读,当前数据记录可自由移动

ADOPENDYNAMIC(=2)

可读写,当前数据记录可自由移动

ADOPENSTATIC(=3)

可读写,当前数据记录可自由移动,可看到新增记录

B:

ADLOCKREADONLY(=1)

缺省锁定类型,记录集是只读的,不能修改记录

ADLOCKPESSIMISTIC(=2)

悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

ADLOCKOPTIMISTIC(=3)

乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

ADLOCKBATCHOPTIMISTIC(=4)

批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。

对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,

数据在这段时间被更新。这减少了资源的使用。

1、数据库锁表的意思:因为在数据库里,同一个数据可能有多个人来读取或更改,为了防止我更改的时候别人也同时更改,这是一般要锁住表不让别人改。

2、举个简单例子:在更新数据库记录的过程中,我是不希望别人也来更新我的这些记录的,像库存,做出库的时候,原数量100,我出了20,我就需要把数量更新到80;

在更新的过程中,别人又做了30的出库,如果在我更新的时候,别人先把库存更新到70,然后我又更新80,那数量就错误了。所以我更新的时候,我就需要锁定这条记录。这是数据行锁,排他锁。

扩展资料:

数据库锁表的必要条件:

1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9624595.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存