3

重複の可能性:
MySQLテーブルの最大行数を設定するにはどうすればよいですか?

MySQLテーブルに制限を設定し(たとえば100'000)、制限に達したときに古いエントリを削除することは可能ですか(そしてどのように)?

つまり、100'000のエントリがあり、100'001が表示されると、IDが最小のエントリが削除され、新しいエントリが作成されます(もちろん新しいIDで)。

MySQLがこれを独自に処理するようにしたいので、外部スクリプトが干渉する必要はありません。

これはログ記録の目的で必要です。つまり、特定の期間、たとえば1週間だけログを保持したいのです。たぶん、MySQLがそれ自体で1週間より古いエントリを削除することは可能ですか?

4

1 に答える 1

2

トリガーを提案します。これは、各挿入で最大テーブルサイズが考慮されていることを確認するための最良の方法です。

重複の可能性MySQLテーブルの最大行数を設定するにはどうすればよいですか?

その受け入れられた答えから:


テーブルへの新しいレコードの追加を制限してみてください。新しいレコードを追加するときにエラーを発生させます。

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 ;

大きなInnoDbテーブルでは、COUNT操作が遅くなる可能性があることに注意してください。

MySQL 5.5では、SIGNALステートメントを使用してエラーを発生させることができます。

于 2013-01-11T16:06:24.310 に答える