Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  トランザクションを使用した DML 操作のグループ化

14.6.3 トランザクションを使用した DML 操作のグループ化

デフォルトでは、MySQL サーバーへの接続は、自動コミットモードが有効になっている状態で開始されるため、SQL ステートメントは実行するたびに自動的にコミットされます。一連の DML ステートメントを発行し、すべてまとめてコミットまたはロールバックすることが標準操作となっているほかのデータベースシステムの使用経験がある場合は、この操作モードに馴染みがないかもしれません。

複数ステートメントのトランザクションを使用するには、SQL ステートメント SET autocommit = 0 を使用して自動コミットをオフにして、必要に応じて COMMIT または ROLLBACK を使用して各トランザクションを終了します。自動コミットをオンのままにするには、START TRANSACTION を使用して各トランザクションを開始し、COMMIT または ROLLBACK を使用して終了します。次の例は 2 つのトランザクションを表しています。1 番目はコミットされ、2 番目はロールバックされています。

shell> mysql test

mysql> CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));
Query OK, 0 rows affected (0.00 sec)
mysql> -- Do a transaction with autocommit turned on.
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> -- Do another transaction with autocommit turned off.
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> INSERT INTO customer VALUES (20, 'Paul');
Query OK, 1 row affected (0.00 sec)
mysql> DELETE FROM customer WHERE b = 'Heikki';
Query OK, 1 row affected (0.00 sec)
mysql> -- Now we undo those last 2 inserts and the delete.
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 などの API または MySQL の標準 C 呼び出しインタフェースでは、COMMIT などのトランザクション制御ステートメントを SELECTINSERT などのその他の SQL ステートメントと同様の文字列として、MySQL サーバーに送信できます。一部の API では、別個の特別なトランザクションコミットおよびロールバックの関数やメソッドも提供されています。


User Comments
  Posted by kumar mcmillan on May 20, 2005
unlike any other transactional database, MySQL does not rollback CREATE TABLE statements!! This is a major pain when trying to, say, re-run a script that loads a schema, but errors on foreign key constraints towards the end.
  Posted by Jon Coulter on July 22, 2005
The previous user mentioned that other database engines rollback DDL operations (like create table), and while this is true for MSSQL and PostgreSQL, it is not true for Oracle -- Oracle commits any existing transaction as soon as a DDL command is executed. Therefor, InnoDB tables are handled as Oracle would handle them, which as we can all agree, is a good example to follow :)
Sign Up Login You must be logged in to post a comment.