关于Navicat for mysql批量提交事务回滚的问题 |
您所在的位置:网站首页 › 班级团建活动策划方案1000字 › 关于Navicat for mysql批量提交事务回滚的问题 |
-- 本人用的是mysql 5.7.20测试的 -- 引用: -- http://blog.51cto.com/lujinxiong/1844769 Navicat for mysql 快捷键 -- https://blog.csdn.net/ocean1010/article/details/6908064 查阅事务的辅助资料这个是关于mysql不是InnoDB引擎的问题 -- 方法一:这种一般配合java使用 #创建账户表 CREATE TABLE IF NOT EXISTS account( id INT(11)NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(32)NOT NULL, money DECIMAL(9,2) )ENGINE=INNODB; #插入用户数据 INSERT INTO account(username,money)VALUES('A',1000.00); INSERT INTO account(username,money)VALUES('B',200.00); /*事务处理*/ # A账户汇款失败 SELECT * FROM account; #第一步 关闭事务自动提交模式 SET autocommit=0; #第二步 开始事务 START TRANSACTION; #第三步 发现汇款失败,将事务回滚ROLLBACK || 汇款成功将事件commit #假设语法错误 UPDATE account SET money=money-500 WHERE username='A'; SELECT * FROM account; UPDATE account SET money=money+200 WHERE username='B'; ROLLBACK; #第四步 还原Mysql数据库的的自动提交 SET autocommit=1; SELECT * FROM account; /*B接收汇款失败*/ SELECT *FROM account ; SET autocommit =0; START TRANSACTION; UPDATE account SET money=money-500 WHERE username='A'; SELECT * FROM account ; #假设语法错误 UPDATE account SET money=money+200 WHERE username ='B'; ROLLBACK; SET autocommit =1; SELECT * FROM account; #清除数据TRUNCATE account; -- 引用: #http://blog.51cto.com/chlotte/401986 #DELETE 在删除数据的时候,系统需要记录每一个命令,以便在需要时能够撤回该命令,DELETE将需要使用表所占用空间的两倍. #TRUNCATE在删除数据的时候不记录日志.所需的时间比较快,所占用的磁盘空间也比较小. #DROP TABLE直接删除表,而不是表中的数据. -- 引用:#https://blog.csdn.net/ssmdz/article/details/75385790 #https://www.cnblogs.com/fnlingnzb-learner/p/6861376.html -- 方法二:1 .这种一般直接在Navicat for mysql中使用 #这种不用设置手动和自动提交事务 CREATE TABLE tran_test( f1 VARCHAR(10) NOT NULL, f2 INT(1) DEFAULT NULL, PRIMARY KEY (f1) )ENGINE=INNODB CHARSET=utf8 DROP PROCEDURE IF EXISTS t_test; DELIMITER // CREATE PROCEDURE t_test() BEGIN DECLARE t_error INTEGER; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1; START TRANSACTION; --整个存储过程指定为一个事务 INSERT INTO tran_test VALUES('A',1); INSERT INTO tran_test VALUES('B',2); IF t_error = 1 THEN ROLLBACK; ELSE COMMIT; END IF; END// CALL t_test(); -- 方法二:2 .这种一般直接在Navicat for mysql中使用 (上边的简化) DROP PROCEDURE IF EXISTS t_test; DELIMITER // CREATE PROCEDURE t_test() #SET autocommit =0; BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; START TRANSACTION; INSERT INTO tran_test VALUES('G',3); INSERT INTO tran_test VALUES('H',4); COMMIT; #SET autocommit =1; END// CALL t_test() -- 查看是否手动开启手动提交(参数autocommit=0),自动开启自动提交(参数autocommit=1) -- show session variables like 'autocommit'; -- +---------------+-------+ -- | Variable_name | Value | -- +---------------+-------+ -- | autocommit | ON | -- +---------------+-------+ -- -- show global variables like 'autocommit'; -- set session autocommit=0; -- show session variables like 'autocommit'; -- show global variables like 'autocommit'; -- +---------------+-------+ -- | Variable_name | Value | -- +---------------+-------+ -- | autocommit | ON | -- +---------------+-------+ -- set global autocommit=0; -- show global variables like 'autocommit'; -- show variables like 'autocommit'; -- +---------------+-------+ -- | Variable_name | Value | -- +---------------+-------+ -- | autocommit | ON | -- +---------------+-------+ -- set autocommit=0; -- delete from MyDB.test where name='kerry'; -- SHOW VARIABLES LIKE '%AUTOCOMMIT%'; select * from tran_test |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |