0

Is it possible to disable the possibility to update a primary key column on global level via global session or server variable?

Or do I need to manually check it an update trigger in each table?

4

2 に答える 2

5

spencer7593 の回答を補完するものとして、DB のユーザーを自分で管理する場合は、次を使用して常にいくつかの列を「保護」できますREVOKE

REVOKE UPDATE (primary_key_col) ON db.tbl FROM 'user'@'localhost'
于 2013-07-31T22:34:52.380 に答える
2

いいえ。グローバル、サーバー、セッションなどを使用して、「主キー」制約の一部である列への更新を禁止することはできません。変数。

UPDATE ステートメントが変更を加えないようにしたい場合は、各テーブルで BEFORE UPDATE トリガーを使用して強制することができます。

SET NEW.primary_key_col = OLD.primary_key_col;

ファローアップ:

dmjm は次のように述べています。「むしろエラーをスローします...」

MySQL 5.5 以降を使用してトリガーからエラーをスローするには、新しいSIGNAL構文を使用できます。 http://dev.mysql.com/doc/refman/5.5/en/signal.html

MySQL 5.1 以前では、エラーをスローする直接的な方法がないため、開発者は、エラーがスローされることを (仮想的に) 保証するために実行される「悪い」コードを実装しました。

IF ( NEW.primary_key_col <> OLD.primary_key_col ) THEN
  UPDATE `Error: primary_key_col modification not allowed` SET dummy=0 WHERE dummy=-1;
END IF;
于 2013-07-31T22:21:11.873 に答える