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?
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?
spencer7593 の回答を補完するものとして、DB のユーザーを自分で管理する場合は、次を使用して常にいくつかの列を「保護」できますREVOKE
。
REVOKE UPDATE (primary_key_col) ON db.tbl FROM 'user'@'localhost'
いいえ。グローバル、サーバー、セッションなどを使用して、「主キー」制約の一部である列への更新を禁止することはできません。変数。
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;