-- 事务
-- 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
-- 数据库开启事务命令
-- start transaction开启事务
-- Rollback回滚事务,即撤销指定的sql语句(只能回退insert delete update语句)
-- commit提交事务,提交未存储的事物
-- savepoint保留点,事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)
START TRANSACTION
UPDATE account SET balance=balance - 5000 WHERE name='cunzhang';
-- savepoint
CREATE TABLE test2 (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR (20)) ENGINE=INNODB;
INSERT INTO test2(name) VALUES ('alvin'), ('lupe'), ('xiaocaomao');
START TRANSACTION;
DELETE FROM test2;
SELECT * FROM test2;
ROLLBACK ;
SELECT * FROM test2;
START TRANSACTION;
INSERT INTO test2 (name) VALUES ('egon');
SELECT * FROM test2;
COMMIT;
START TRANSACTION;
INSERT INTO test2 (name) VALUES ('sen');
SAVEPOINT insert1;
INSERT INTO test2 (name) VALUES ('rose');
SAVEPOINT insert2;
INSERT INTO test2 (namw) VALUES ('shirley');
SAVEPOINT insert3;
SELECT * FROM test2;
DELETE FROM test2 WHERE id=3;
SAVEPOINT delete1;
DELETE FROM test2 WHERE id=2;
SAVEPOINT delete2;
ROLLBACK to delete2;
SELECT * FROM test2;
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='lesson54')
cursor = conn.cursor()
try:
insertSQL1 = 'INSERT INTO account2 VALUES (4, "dengziqi", 9000)'
updateSQL2 = 'UPDATE account2 SET balance = balance - 5000 WHERE id = 3'
updateSQL3 = 'UPDATE account2 SET balance = balance + 5000 WHERE id = 1'
cursor.execute(insertSQL1)
conn.commit()
cursor.execute(updateSQL2)
raise Exception
cursor.execute(updateSQL3)
conn.commit()
except Exception as e:
conn.rollback()
conn.commit()
cursor.close()
conn.close()