`
flex_莫冲
  • 浏览: 1076063 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql lock tables

阅读更多
要解决的一个应用是
执行一个业务逻辑时将表锁住,其他同时执行该业务逻辑的业务必须等当前占用locked 表资源的业务完成之后才能执行业务。

因此要用lock tables来实现该功能。

Thinkphp有个M()->lock(true)的功能,但是它其实不是锁表,它是在事务中在sql添加 for update。
当然,用事务也能实现以上逻辑。参考
http://www.thinkphp.cn/topic/9964.html

但我们的表是MYISAM的,也不想为了这个功能就将schema改成INNODB。

因此,还是要用lock tables来实现。
看下面的代码,请注意:testSelectLock也必须执行锁表操作,否则即使执行testLock,testSelectLock也可以查出数据。

public function testLock()
	{
		set_time_limit(0);
		M()->query("lock tables plan_article write");
		file_put_contents('test.log', "locked",FILE_APPEND) ;
		sleep(15);
		M()->query("unlock tables");
		file_put_contents('test.log', "unlocked",FILE_APPEND) ;
	}
	
	public function testSelectLock()
	{
		M()->query("lock tables plan_article write");
		$result = M("plan_article")->limit(5)->select();
		dump($result);
	}



查看当前锁表的表记录,使用以下sql查看
show OPEN TABLES where In_use > 0;


同时锁住多个表
lock tables plan_article write,config_kicker write



今天又出现了一个问题,lock article表之后要对另一个表进行查询和新增,这时会sql不会执行,db error:
Table 'config_kicker' was not locked with LOCK TABLES
为了解决这个问题,必须将config_kicker也一起lock下。
M()->query("lock tables plan_article,config_kicer write");
参考
http://book.51cto.com/art/200803/68121.htm
http://blog.csdn.net/iefreer/article/details/8733723
http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
分享到:
评论

相关推荐

    mysql下普通用户备份数据库时无lock tables权限的解决方法

    [root@jb51.net]# mysqldump -u dbuser -ppass db > db.sql mysqldump: Got error: 1044: Access denied for user ‘dbuser’@’localhost’ to database ‘db’ when using LOCK TABLES 解决一: 加上-skip-lock-...

    mysql启动提示mysql.host 不存在,启动失败的解决方法

    error 日志当中的记录: [ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist 从发了帖子,只有人看,没有人回复,看到这种情况只能自己解决问题了,自己动手...

    MySQL数据库:锁定与解锁.pptx

    MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} 说明: 表锁定支持以下类型的锁定。 READ:读锁定,确保用户可以读取表,...

    错误代码:1100 Table 't_depart_info' was not locked with LOCK TABLES的解决方法

    就是告诉大家如何解决错误代码:1100 Table 't_depart_info' was not locked with LOCK TABLES,遇到类似问题的朋友可以参考一下

    mysql 本地数据库如何从远程数据库导数据

    Java代码 代码如下: mysqldump -h ‘114.212.111.123’ -uROSE -pxxxooo –opt –compress ITSM –skip-lock-tables | mysql -h localhost -uroot -proot ITSMC ********************格叽格叽1:不明真相的看下边**...

    MySQL中文参考手册.chm

    7.22 EXPLAIN (解释)句法(得到关于SELECT的信息) 7.23 DESCRIBE (描述)句法(得到列的信息) 7.24 LOCK TABLES/UNLOCK TABLES (锁定表/解锁表)句法 7.25 SET OPTION (设置选项)句法 7.26 ...

    MySql数据库迁移.docx

    MySql数据库迁移全文共3页,当前为第1页。... mysql> grant reload,process,lock tables,replication client on *.* to wuzy@localhost; 创建存放目录 [root@centos6 mysql]# mkdir -pv /data/wuzy m

    MYSQL

    7.24 LOCK TABLES/UNLOCK TABLES (锁定表/解锁表)句法 7.25 SET OPTION (设置选项)句法 7.26 GRANT (授权)和REVOKE (撤回)句法 7.27 CREATE INDEX (创建索引)句法 7.28 DROP INDEX (抛弃索引)...

    MySQL 备份和恢复策略

    它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy ...

    MySQL出现Waiting for table metadata lock的原因方法

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)...

    MySQL 5.1中文手冊

    LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.6. 复制...

    MySQL中文参考手册

    * 1 MySQL的一般的信息 o 1.1 什么是MySQL? o 1.2 关于本手册 + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o ...

    Mysql数据库测试包,包含sql文件与相关配置

    该数据库包含约30万条员工记录和280万条工资条目。导出数据为167MB,这并不庞大,但对于测试来说足够重。 数据是生成的,因此存在不一致和微妙的问题。我们没有删除它们,而是决定...LOCK TABLES, EXECUTE, CREATE VIEW

    MySQL 5.1官方简体中文参考手册

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL...

    mysql锁表解表

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)...

    mysql学习总结

    mysql> FLUSH TABLES WITH READ LOCK; 2. 仍然加锁时,执行该命令(或它的变体): shell> tar zcf /tmp/backup.tar.gz /var/lib/mysql 3. 发出该语句并且确保记录了以后用到的输出: mysql>SHOW MASTER STATUS...

    MYSQL 服务无法启动 1067 解决办法

    MYSQL 服务无法启动 1067 解决办法,我用过了,非常OK。

    MySQL 5.1参考手册

    LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.6. 复制...

    MYSQL v4.1中文参考手册(CHM)

    6.7.2 LOCK TABLES/UNLOCK TABLES 句法 6.7.3 SET TRANSACTION 句法 6.8 MySQL 全文搜索 6.8.1 全文的限制 6.8.2 微调 MySQL 全文搜索 6.8.3 全文搜索 TODO 6.9 MySQL 查询缓存 6.9.1 查询缓存如何...

Global site tag (gtag.js) - Google Analytics