MySQL では、ロールバックを許可するトランザクションテーブルと、許可しない非トランザクションテーブルの両方を操作できます。 このため、MySQL とほかの DBMS とでは制約の処理が多少異なります。 エラーが起きたときに変更をロールバックできない非トランザクションテーブルに、多数の行を挿入または更新した場合を扱う必要があります。
基本的な考え方は、MySQL Server が、実行するステートメントを構文解析している間に検出できるすべてのものに対してエラーを生成しようとし、ステートメントを実行する間に発生するエラーからリカバリしようとするというものです。 ほとんどの場合でこれを行いますが、すべての場合にはまだです。
エラーが発生したときに MySQL で可能な選択肢は、途中でステートメントを中止するか、問題からリカバリするためにできるかぎりのことを行なって処理を続行するかです。 デフォルトでは、サーバーは後者の方法に従います。 これは、たとえば、サーバーは無効な値をもっとも近い有効な値に強制的に修正するということです。
不良データ値の処理や、エラー時にステートメント実行を継続するか中止するかをより適切に制御できるようにする複数の SQL モードオプションを利用できます。 これらのオプションを使用して、不適切な入力を拒絶するほかの DBMS と同じように、より従来に近い方法で機能するように MySQL Server を構成できます。 サーバー起動時に、SQL モードをグローバルに設定して、すべてのクライアントに影響を与えることができます。 実行時に個々のクライアントで SQL モードを設定できるため、各クライアントは要件にもっとも適した動作を選択できます。 セクション5.1.11「サーバー SQL モード」を参照してください。
次のセクションでは、さまざまな種類の制約を MySQL Server で処理する方法について説明します。