デフォルトによって、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
は、別々の特別トランザクション
コミットやロールバック機能または方法も提供します。