您的位置:首页 > 数据库 > MySQL

MySql 加锁问题

2015-10-15 19:01 609 查看
1、设置非自动提交 set autocommit=0; 这时候 for update才会起作用

2、一般用法 set autocommit=0; for update(加锁) ; commit/rollback; set autocommit=1;

首先看一下,set autocommit=0 后,执行哪些语句会自动加锁,加的是什么锁?

测试环境:5.6.16 innnoDB引擎 非自动提交方式(即 set autocommit=0;)

测试过程:执行 select * from w_help ;这个语句,并不会加锁 其他命令窗口一样可以增删改查;测试代码如下

DELIMITER $$

DROP PROCEDURE IF EXISTS `test_release`.`test_Lock`$$

CREATE DEFINER=`encysys48`@`%` PROCEDURE `test_Lock`(IN    v_id    VARCHAR(20),IN    v_flag    VARCHAR(10))
BEGIN
set autocommit=0;
select t.flag from test_lock t where t.hf_serial = v_id for update;
/*update w_help t
set t.char_content = v_flag ;
-- where t.id ="476";
-- insert into w_help(char_content) values ('aaaaaaaaaaaaaaaaaaaa') ;*/
delete from w_help where w_help.id = '490';
-- select * from w_help ;
select sleep(v_flag);
commit;
set autocommit=1;
END$$

DELIMITER ;

--
select * from w_help;  -- 可以执行
insert w_help(char_content) values("abcd"); -- 可以执行
update w_help t
set t.char_content = '12345'
where t.id = "490"; -- 被锁定的唯一一行 不能执行
delete from w_help  where w_help.id = '488';  -- 不是同一行,可以执行
delete from w_help   -- 不能执行
update w_help t
set t.char_content = "666" where t.id = "489";


乱七八糟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: