在MYSQL里,要怎么才可以做到锁定一条记录

在MYSQL里,要怎么才可以做到锁定一条记录,第1张

你说的锁定是什么意思,禁止修改,禁止删除,禁止更新,是么,如果是的话,你可以在mysql里面建立一个触发器来禁止删除,下面一个示例,直接在mysql命令行执行一次就好了,永久性的,不需要重复执行

DROP TRIGGER IF EXISTS m

CREATE TRIGGER 触发器名字 AFTER DELETE ON 表名 FOR EACH ROW

BEGIN

DECLARE msg VARCHAR (255)

IF old.count = 1 THEN -- old为伪记录

SET msg = "超级管理员不能被删除"

SIGNAL SQLSTATE 'HY000' SET mysql_errno = 22, message_text = msg-- HY000为系统内部错误号,22为自定义的显示错误号,msg为错误文本

END IF

END

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、查看数据库锁,诊断锁的来源及类型:

select object_id,session_id,locked_mode from v$locked_object

或者用以下命令:

select b.owner,b.object_name,l.session_id,l.locked_mode

from v$locked_object l, dba_objects b

where b.object_id=l.object_id 2、找出数据库的serial#,以备杀死:

select t2.username,t2.sid,t2.serial#,t2.logon_time

from v$locked_object t1,v$session t2

where t1.session_id=t2.sid order by t2.logon_time3、杀死该session

alter system kill session 'sid,serial#'

记得以上是用SYS或者SYSTEM账户进入,要不没权限。


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

原文地址: http://outofmemory.cn/sjk/9904322.html

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

发表评论

登录后才能评论

评论列表(0条)

保存