MySQL 笔记
自定义函数
存储过程
事务
在学习韩顺平的 MySQL 课程时,看到了如下 SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CREATE PROCEDURE insert_many_emp(IN start_id INT, IN call_num INT) BEGIN DECLARE i INT DEFAULT 0; # MySQL 默认开启事务自动提交模式,每条 SOL 语句都会被当做一个单独的事务自动执行 # 因此每插入一条数据,事务即完成,从而都会即刻自动提交一次 # 为了提高效率,这里使用 SET autocommit 语句设置事务的自动提交模式 SET autocommit = 0; REPEAT INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES ((start_id + i), rand_string(6), 'SALESMAN', 0001, CURDATE(), 2000, 400, rand_num()); SET i = i + 1; UNTIL (i = call_num) END REPEAT; # 插入大量随机雇员数据后,整体进行提交 COMMIT; # 恢复默认开启事务自动提交模式 SET autocommit = 1; END$$
|
上面的注释应该讲 SET autocommit = 0
解释清楚了,但这里非常有必要再额外补充 SET autocommit = 0
与 start transaction
的区别:
总结下:两种方式都可以用于事务,但非常不推荐使用 SET autocommit = 0
。这样设置以后,相当于强制所有人都默认关闭了自动提交,但并不是每个人都知道他们使用了,也可能另外一个 DBA 又重新开启了自动提交,这就带来了很多混乱!