MySQL テーブルの行を不変にしたいのですが、一度挿入すると変更できないようにしたくありません。これどうやってするの?
(理想的には、何らかの変更が試みられた場合に適切なエラー メッセージを返します)。
私は付与権限を持っていないので、エラーを発生させるトリガーを記述する方法を理解したいと思いBEFORE UPDATE
ます(シグナルを使用するか、常に失敗するステートメントを発行します)。
MySQL v5 を使用しています。
InnoDB を使用している場合は、トリガーを使用しない別のソリューション。
その複製である別のテーブルを作成します。新しいテーブルの列には、問題の元のテーブルの列を指す外部キー (したがって、このソリューションの InnoDB 要件) が必要です。
ON UPDATE RESTRICT
各キーのような制限を入れます。1列のコードの下:
CREATE TABLE original (
....
immutable_column ...
INDEX index1(immutable_column)
....
) ENGINE=INNODB;
CREATE TABLE restricter (
.....
col1,
INDEX index2(col1),
FOREIGN KEY (col1) REFERENCES original (immutable_colum) ON UPDATE RESTRICT ON DELETE CASCADE
) ENGINE=INNODB;
ただし、この新しいテーブルに手動で挿入する必要があります。