6

MySQL テーブルの行を不変にしたいのですが、一度挿入すると変更できないようにしたくありません。これどうやってするの?

(理想的には、何らかの変更が試みられた場合に適切なエラー メッセージを返します)。

私は付与権限を持っていないので、エラーを発生させるトリガーを記述する方法を理解したいと思いBEFORE UPDATEます(シグナルを使用するか、常に失敗するステートメントを発行します)。

MySQL v5 を使用しています。

4

2 に答える 2

0

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;

ただし、この新しいテーブルに手動で挿入する必要があります。

于 2014-07-13T07:27:01.957 に答える