1. 理解事务
MySQL 中的事务可以是对一组操作的集合,在这个集合中,所有的操作必须全部执行成功,否则所有操作都要回滚。
可以将事物的执行视为 SQL 语句的打包执行。例如,当您需要从一个帐户扣除一些金额并将其添加到另一个帐户时,这两个任务必须同时执行,否则就可能存在风险,使得在扣款之后,无法成功的将金额添加到接收方账户上。
2. 开启事物
2.1. 开启事务方法
在 MySQL 中,我们可以使用 BEGIN 或 START TRANSACTION 命令来开启事务。
START TRANSACTION; -- 或 BEGIN;
2.2. 事务范围内的 SQL 操作
在开启一个事务执行的过程中,所有在事务范围内的操作都将被视为一个整体的执行过程,要么全部执行成功,要么全部执行失败并回滚到初始状态。
-- 插入数据
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
-- 更新数据
UPDATE table_name SET column1 = value1 WHERE id = 1;
-- 删除数据
DELETE FROM table_name WHERE id = 1;
2.3. 回滚事务
如果在事务中出现错误,您可以使用 ROLLBACK 命令来回滚事务并且撤销所有的已经执行的操作。该命令将回滚到 START TRANSACTION 的位置。
-- 回滚事务
ROLLBACK;
-- 实现事务回滚的示例代码
START TRANSACTION;
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
DELETE FROM table_name WHERE id = 1;
COMMIT;
-- 如果 DELETE FROM table_name WHERE id = 1; 导致错误,您可以用 ROLLBACK 来撤销这条操作
2.4. 提交事务
如果您已经对所有操作执行完成,并且确保这些操作执行成功,您可以使用 COMMIT 命令来提交事务并永久地将这些操作应用于数据库。
COMMIT;
2.5. 显式关闭事务
如果您在事务执行的过程中,不想将所有操作视为一个整体执行,您可以使用 COMMIT 或 ROLLBACK 来结束您的事务,显式的将事务关闭。
当您不结束事务时,MySQL 会将事务挂起,直到显式结束这个事务,或者会话结束,当然在会话结束之后,所有未完成的事务将会自动回滚。
3. 结论
事务的设计和使用沉积在数据库的使用背景中,将事务集合起来能够在很大程度上提高数据的安全性和完整性,并且对于一些需要操作多个表格的单个操作,事务的使用可以极大的简化代码的管理和维护难度。