デフォルトによって、MySQL
サーバーに接続する各クライアントが、実行するとすべての
SQL
ステートメントを自動的にコミットする自動コミットが有効な状態で開始します。複数のステートメントを含むトランザクションを使用するには、SQL
ステートメント SET autocommit =
0
で自動コミットをオフに切り替え、各トランザクションの終わりに
COMMIT
、ROLLBACK
のいずれかを入力します。自動コミットをオンの状態のままにしておきたければ、トランザクションを
START
TRANSACTION
で開始し、COMMIT
か
ROLLBACK
のどちらかで終了させることができます。次の例は
2
つのトランザクションを表しています。最初のものはコミットされ、2
つめのものはロールバックされています。
shell>mysql test
mysql>CREATE TABLE customer (a INT, b CHAR (20), INDEX (a))
->ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec) mysql>START TRANSACTION;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO customer VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec) mysql>COMMIT;
Query OK, 0 rows affected (0.00 sec) mysql>SET autocommit=0;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO customer VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec) mysql>ROLLBACK;
Query OK, 0 rows affected (0.00 sec) mysql>SELECT * FROM customer;
+------+--------+ | a | b | +------+--------+ | 10 | Heikki | +------+--------+ 1 row in set (0.00 sec) mysql>
PHP、Perl DBI、JDBC、ODBC、または MySQL
のスタンダード C
呼び出しインタフェースのような API
内では、COMMIT
のようなトランザクションコントロールステートメントを
SELECT
や
INSERT
のような別の SQL
ステートメントのような文字列として、MySQL
サーバーに送ることができます。いくつかの API
は、別々の特別トランザクションコミットやロールバック機能または方法も提供します。