0

「オールオアナッシング」を行うためにトランザクションを実行する必要がありますが、そこに到達するのにいくつか問題があります。

次の例では、3 番目の INSERT が失敗しますが、最初の 2 つが挿入されます。問題は、私がすべてを行うか、何もしない必要があるということです。または、すべてを挿入するか、何も挿入しません。

MySQLでこれを行うにはどうすればよいですか? 私はInnoDBを使用しています。

START TRANSACTION;
insert into t_orders (id_order, date_begin, date_end) values ('1', '2012-9-08', '2012-9-16');
insert into t_orders_items (id_order, id_order_item, id_item, item_quantity) values ('1', '1', '2', '1');
insert into t_orders_items (id_order, id_order_item, id_item, item_quantity) values ('1', '1', '3', '1');
COMMIT;

いくつかの手がかり?

よろしくお願いします、

4

3 に答える 3

1

ストレージの種類によって異なります。InnoDB テーブルではこれは機能しますが、MyISAM はトランザクションをサポートしておらず、START TRANSACTION ステートメントを無視します。テーブルのストレージ エンジンを InnoDB に変更します。(小さい) 少し遅いですが、はるかに安全です。

于 2012-09-07T12:50:31.397 に答える
-1

これら 2 つのテーブルのデータ構造に関する詳細はありますか? t_orders_items にプライマリ キーまたは一意のキーが存在する可能性があり、トランザクションが失敗する原因となる同様の値を挿入しようとしています。

于 2012-09-07T12:52:47.590 に答える
-1

テーブル t_orders_items: id_order は主キーであり、同じ値 '1' を 2 回挿入しました

于 2012-09-07T12:53:02.350 に答える