
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方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。
你说的锁定是什么意思,禁止修改,禁止删除,禁止更新,是么,如果是的话,你可以在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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)