MyISAM
ストレージエンジンの使用時に、MySQL
は複数リーダーまたは単一ライターの利用が可能な非常に高速のテーブルロックが使用されます。このテーブル型の最大の問題は、同じテーブルに対して複数の
UPDATE と遅い SELECT
が混在する場合に発生します。テーブルでこのような問題が発生した場合は、別のテーブル型を使用してもかまいません。Storage Engines
を参照してください。
MySQL
はトランザクションテーブル、非トランザクションテーブルの両方で機能します。非トランザクションテーブル
(何らかのエラー発生した場合にロールバックができない)
での動作をスムーズにするため、MySQL
には次の規則があります。この規則が適用されるのは厳格な
SQL モードで作動していないとき、あるいは
IGNORE
指示子を
INSERT
または
UPDATE
に使用しているときのみであることに注意してください。
すべてのカラムにデフォルト値がある。
カラムに対して適切でない値や範囲を超えた数値を挿入した場合、MySQL ではエラーを発生するのではなく、「取り得る値のうちの最適値」 に値を設定する。数値の場合は 0 で、可能な最小値か最大値になる。文字列の場合は、空白文字かカラムの最大長さにあわせた文字列になる。
計算式はすべて、エラー状態を表示するのではなく、使用可能な値を返す。たとえば、1/0
の場合は、NULL
を返す。
前述の動作を変更するには、サーバーの SQL
モードを適切に設定することで、より厳格なデータ処理を可能にします。このことにより、以前の動作反応を変更することができます。この詳細については、How MySQL Deals with Constraints、Server SQL Modes、そして項8.2.5. 「INSERT
構文」を参照してください。