MySql(23)------mysql锁定语句

来源:互联网 发布:mysql编写自定义函数 编辑:程序博客网 时间:2024/06/01 09:04

MySql支持MyISAM和MEMORY存储引擎的表进行表级锁定,对BDB存储引擎的表进行页级锁定,

对InnoDB存储引擎的表进行行级锁定。默认情况下,表锁和行锁都是自动获取的,不需要额外的命令。

但是有些情况下,需要我们明确的去指定表的锁级别,操作数据,保证整个事务的完整性。

一 准备条件

建表:

CREATE TABLE `t_user_main` (  `f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键',  `f_userName` varchar(100) DEFAULT NULL,  `f_age` int(3) DEFAULT NULL COMMENT '年龄',  PRIMARY KEY (`f_userId`),  KEY `userName_index` (`f_userName`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

插入数据:

INSERT INTO t_user_main (f_userName, f_age)   VALUES('one',24),('two',25),('three',26),('four',27),('five',28),('six',29); 

二 LOCK TABLE 和 UNLOCK TABLE

LOCK TABLE可以锁定用于当前线程的表。如果被其他线程锁定,当前线程就会处于等待状态,直到其他

线程释放锁,本线程获取所有锁定为止。


UNLOCK TABLES可以释放当前线程获得得锁定。当前线程执行一个LOCK TABLES时,或当与服务器的连接关闭时,

所有由当前线程锁定的表被隐含的进行解锁。

锁定与解锁语法:

锁定单个表:

LOCK TABLE table_name[AS alias]{READ[LOCAL]|[LOW_PRIORITY]WRITE};

锁定多个表:

LOCK TABLES

     table_name[AS alias]{READ[LOCAL]|[LOW_PRIORITY]WRITE}

     [,table_name[AS alias]{READ[LOCAL]|[LOW_PRIORITY]WRITE}]......

解锁(一个或多个):

UNLOCK TABLES;


eg:

0 0
原创粉丝点击