关于Navicat for mysql批量提交事务回滚的问题

您所在的位置:网站首页 班级团建活动策划方案1000字 关于Navicat for mysql批量提交事务回滚的问题

关于Navicat for mysql批量提交事务回滚的问题

2023-08-17 00:13| 来源: 网络整理| 查看: 265

-- 本人用的是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