如何在我的資料庫中禁用 PK 更改?是否可以?
例如,我有這張表:
user
id name email password ...
1 Alex ... ...
2 Mark ... ...
如何禁用更改 user.id 的可能性?
uj5u.com熱心網友回復:
您可以使用資料庫參考機制。創建一個參考您要保護的列的虛擬表,并撤銷其他用戶對該表的訪問權限。例子:
create table users(
id int primary key,
name text);
insert into users values
(1, 'John');
create table users_restrict(
id int references users);
insert into users_restrict
values (1);
參考的默認模式是限制洗掉或更新:
update users set
id = 2
where id = 1;
ERROR: update or delete on table "users" violates foreign key constraint "users_restrict_id_fkey" on table "users_restrict"
DETAIL: Key (id)=(1) is still referenced from table "users_restrict".
或者,您可以定義一個觸發器來放棄您不想要的修改,例如
create or replace function protect_users_id()
returns trigger language plpgsql as $$
begin
if old.id <> new.id then
raise exception 'Cannot change users.id';
end if;
end $$;
create trigger protect_users_id
before update on users
for each row execute procedure protect_users_id();
在db<>fiddle中測驗它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476446.html
標籤:数据库 PostgreSQL 首要的关键
