Joe*_*e M 8 postgresql sql-update
我有一组表,其列在另一个表的用户名列上具有外键约束.我被告知不要添加ON UPDATE CASCADE到表定义中,因为我们不想默默地丢失活动日志之类的信息.我们只想在这个实例中明确级联.我无法在查询中找到如何执行此操作的示例.我觉得它看起来像
UPDATE CASCADE "MySchema"."MyTable"
SET user_name = "John Smith"
WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
这可能吗?
kli*_*lin 13
在Postgres(和其他RDBM)中,级联更新仅适用于外键.例:
create table groups (
group_id int primary key
);
create table users (
user_id int primary key,
group_id int references groups on update cascade
);
insert into groups values (1);
insert into users values (1, 1);
update groups set group_id = 10 where group_id = 1;
select * from users;
user_id | group_id
---------+----------
1 | 10
(1 row)
Run Code Online (Sandbox Code Playgroud)
实际上,不需要其他选项.如果您觉得需要对非外键的列执行此操作,则意味着该模型设计不当(未进行规范化).另一方面,外键的选择性级联更新的可能性不能解决任何实际问题,而是制动一般规则.
AFAIK,您不能CASCADE像UPDATE使用DELETE.
相反,在 a 中(可能在事务中)执行以下操作。
就像是
ALTER fk_table DROP CONSTRAINT mytable__table_w_fk__fk;
ALTER fk_table ADD CONSTRAINT mytable__table_w_fk__fk
FOREIGN KEY (fk) REFERENCES mytable (pk)
ON UPDATE CASCADE;
Run Code Online (Sandbox Code Playgroud)
UPDATE "MySchema"."MyTable"
SET user_name = "John Smith"
WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
ALTER fk_table DROP CONSTRAINT mytable__table_w_fk__fk;
ALTER fk_table ADD CONSTRAINT mytable__table_w_fk__fk
FOREIGN KEY (fk) REFERENCES mytable (pk);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10940 次 |
| 最近记录: |