0

PHPに投稿するフォームがあります。投稿の一環として、2 つの異なるテーブルにデータを挿入する必要があります。現在、1 回の挿入に続いて 2 回目の挿入を行っています。

あなたはおそらく、私が次に何を尋ねようとしているのかをすでに知っているでしょう:)

両方の挿入が確実に行われるようにする必要があります。2 番目のイベントが発生しない場合は、最初のイベントが発生しないようにするか、ロールバックする必要があります。

私の理解では、mysql 5.5以降のデフォルトであるinnodbを使用している場合、mysqlでこれが可能ですが、centosの最新リリースであるmysql 5.3を使用しています。どうすればわかりますか? また、innodb がオンになっている場合、クエリをどのように記述すればよいですか? そしてもちろん、私のプログラムを使用する可能性のある他の誰かが、innodb を備えた適切なバージョンの mysql を持っていない可能性があると想定する必要があるかもしれません。

ありがとう

4

2 に答える 2

1

テーブルを作成するときに、実行するエンジンを指定できます。トランザクションを使用できるようにするには、InnoDB で行う必要があります。その部分はtable optionsCREATE TABLEの最後にあります。テーブルがまだ InnoDB でない場合は、 で変更できます。ALTER TABLE

php から auto_commit を false に設定することは可能であり、それはあなたがしたいことです。その後、コミットまたはロールバックを実行するまで、すべての操作が 1 つのトランザクション内に保持されます。

START TRANSACTIONもう 1 つの代替手段は、COMMITまたはを手動で送信することROLLBACKです。phpマニュアルに例があります。

于 2013-04-04T20:55:49.950 に答える
0
START TRANSACTION

if(first insert failed)
{
    ROLLBACK
}
else if(second insert failed)
{
    ROLLBACK
}
else
{
    COMMIT
}
于 2013-04-04T20:41:00.590 に答える