sql >> データベース >  >> RDS >> Mysql

関数内でプロシージャを呼び出すと、MySQLERROR1422がスローされます

    暗黙のコミットを引き起こすステートメントは多数ありますが、これらはいずれも、ストアド関数またはトリガー内で、またはストアド関数またはトリガーから呼び出されるストアドプロシージャで使用することはできません。 正味の効果に違いはないからです。

    ちょっと考えてみると、この理由が説明されています。保存された関数(およびトリガー)は、クエリの実行中に実行されます。 。それらは常に例外なく、クエリの開始後に実行を開始し、クエリが終了する前に実行を終了します。また、特にクエリに複数の行が含まれる場合は、単一のクエリの実行中に複数回実行することもできます。

    その観点から、COMMITが可能であるかどうかは意味がありません。 単一のクエリの実行中のトランザクション...そしてそれがSTART TRANSACTION トランザクションが実行されている場合は、現在のトランザクションを暗黙的にコミットし、新しいトランザクションを開始します。

    これは、(別のクエリの途中でプロシージャを呼び出す唯一の方法であるストアド関数またはトリガーを介して)別のクエリの途中で呼び出さない限り、ストアドプロシージャでは問題ありません。ここで行っていることはサポートされていません...実行中のトランザクションがない場合でも、実行中のクエリの途中でトランザクションを開始することはできません。

    http://dev.mysql.com/doc/refman /5.6/en/implicit-commit.html




    1. Yii2はforeachループを使用してデータを表示します

    2. Postgres-XLでのシーケンスとシリアルのパフォーマンス

    3. ClusterControl1.8.2でPostgreSQL用のPgBouncer接続プールを使用する

    4. カレンダーテーブルから欠落している日付を結合する