mysql LOCK TABLES

不需使用workmutex,mysql对表级进行加锁解锁
加解锁时相对于连接而言的,而不是针对线程。
以下所述的线程均是发起一个单独连接的线程。在多线程的mysql程序中,最好是一个线程发起一个链接,否则有隐患。

多线程共享一个连接的话,两个线程同时去操作一个表,会有异常。那么 能否在多个连接上同时操作同一张数据表?
我遇到这样一个问题:
在数据库上建立多个连接,所有连接都更新同一张数据库表。其中,不同的连接是在不同的进程或线程中完成的,执行的操作是 INSERT。
这样的操作是否行得通?

------解决方案--------------------------------------------------------
可以执行,MYSQL会自动加锁控制

refer to  http://www.myexception.cn/mysql/206922.html

经过测试可以。那就没必要手动表锁了,如下。


锁定表Bind 
LOCK TABLES Bind READ;
之后所有线程(包括执行加锁的线程本身)均可读取表Bind ,但均不能写入表Bind 

锁定表Bind 
LOCK TABLES Bind WRITE;
之后只有本线程可读取和写入表Bind ,其他不能读也不能写入表Bind (使用select * from t 测试之)

解除本线程对所有表加的所有锁,无法解除其他线程加的锁;线程没有加锁退出时,其所加锁自动解除。
UNLOCK TABLES

	string sSql="LOCK TABLES Bind WRITE";
	if(!pDB->exec(sSql))
	{
		DBGMYSQL("%s failed",sSql.c_str());
	}
	else
	{
		DBGMYSQL("%s success",sSql.c_str());
	}



查看当前所有连接
 SHOW PROCESSLIST;
获取表的记录条数
SELECT COUNT(Cur) AS num FROM DevLog_Value

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

转载于:https://www.cnblogs.com/-song/archive/2013/06/13/3331807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值