MySQL 事务语句
MySQL 为我们提供了以下重要语句来控制事务:
- 为了启动一个事务,你使用
START TRANSACTION
语句。BEGIN
或BEGIN WORK
是START TRANSACTION
的别名。 - 要提交当前事务并使其变化永久化,你要使用
COMMIT
语句。 - 要回滚当前事务并取消其变化,你可以使用
ROLLBACK
语句。 - 要禁用或启用当前事务的自动提交模式,你可以使用
SET autocommit
语句。 - 默认情况下,MySQL 自动将更改永久性地提交给数据库。要强迫 MySQL 不自动提交更改,你可以使用以下语句:
-
SET autocommit = 0; -- OR -- SET autocommit = OFF
你使用下面的语句来明确地启用自动提交模式:
SET autocommit = 1;
-- OR --
SET autocommit = ON;
COMMIT 实例
为了使用事务,你首先要把 SQL 语句分成逻辑部分,并确定数据何时应提交或回滚。
下面说明了创建一个新的销售订单的步骤:
- 首先,通过使用
START TRANSACTION
语句启动一个事务。 - 接下来,从
orders
表中选择最新的销售订单号,并使用下一个销售订单号作为新的销售订单号。 - 然后,在
orders
表中插入一个新的销售订单。 - 之后,在
orderdetails
表中插入销售订单项目。 - 最后,使用
COMMIT
语句提交该事务。
你可以选择从 orders
和 orderdetails
表中选择数据来检查新的销售订单。
-- 1. start a new transaction
START TRANSACTION;
-- 2. Get the latest order number
SELECT
@orderNumber:=MAX(orderNUmber)+1
FROM
orders;
-- 3. insert a new order for customer 145
INSERT INTO orders(orderNumber,
orderDate,
requiredDate,
shippedDate,
status,
customerNumber)
VALUES(@orderNumber,
'2005-05-31',
'2005-06-10',
'2005-06-11',
'In Process',
145);
-- 4. Insert order line items
INSERT INTO orderdetails(orde