MySQL テーブルの行数の制限: MAX_ROWS ヒントを超えて
MySQL ではテーブルの作成時に MAX_ROWS パラメータを指定できますが、これはデータベース エンジンに対する単なる提案です。テーブルはこの制限を超える可能性があり、行数の絶対的な上限としては無効になります。
最大行数を真に強制するには、別のアプローチが必要です。そのような方法の 1 つは、テーブル内の現在の行数をチェックする BEFORE INSERT トリガーの作成です。
DELIMITER $$ CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SELECT COUNT(*) INTO @cnt FROM table1; IF @cnt >= 25 THEN CALL sth(); -- raise an error END IF; END $$ DELIMITER ;
このトリガーは、新しい行を挿入する前にテーブルの行数を評価します。カウントが事前に定義された制限 (25 など) に達するか超える場合、エラーがトリガーされ、挿入が事実上阻止されます。
ただし、このアプローチでは、特に大きなテーブルの場合、COUNT 操作でパフォーマンスが低下する可能性があります。
MySQL 5.5 では、エラーを発生させる別の手段として SIGNAL // RESIGNAL ステートメントが導入されています。これは、次のようにトリガーに組み込むことができます:
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN IF 25 <= ROW_COUNT() THEN SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'Table size limit reached.'; // Raise an error END IF; END
この手法では、InnoDb テーブルで最適化された COUNT(*) 関数を活用することでパフォーマンスが向上し、行数強制メカニズムの全体的な効率が向上します。
以上がMAX_ROWS ヒントを超えて MySQL テーブルの行数を効果的に制限するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。