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 ;这个语句,并不会加锁 其他命令窗口一样可以增删改查;测试代码如下
乱七八糟
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";
乱七八糟
相关文章推荐
- MySQL 查询单条数据多次与一次查询多条数据的比较
- MySQL 常用命令
- mysql反引号的应用
- MySQL旧版本ORDER BY 方法
- MySQL日期时间函数大全
- 通过Amoeba连接Mysql
- 设置mysql数据库使用utf8编码
- Amoeba for mysql安装配置
- Mysql_mysql 性能分析及explain用法
- mysql错误汇总
- mysql无法启动ERROR! MySQL is running but PID file could not be found ?
- MySQL 显示表字段及注释等信息
- mysql 存储过程 declared局部变量 赋值失败问题(不循环)
- 分享八:特殊的mysql函数
- mysql利用颜表情绕过waf注入
- mysql5.6新特性总结
- mysql索引优化的注意事项
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- Windows下面安装和配置MySQL(5.6.20)
- ibatis插入数据到MySQL