2016-06-29 10 views
3

Ich habe eine Gruppe von Tabellen mit Spalten, die Fremdschlüsseleinschränkungen für eine Benutzername Spalte in einer anderen Tabelle haben. Ich wurde angewiesen, der Tabellendefinition ON UPDATE CASCADE nicht hinzuzufügen, da wir nicht automatisch Informationen aus Aktivitäten wie Aktivitätsprotokollen verlieren möchten. Wir wollen nur in dieser einen Instanz explizit kaskadieren. Ich konnte jedoch kein Beispiel finden, wie es in einer Abfrage funktioniert. Ich denke, es würde so etwas aussehen wieWie wird ein kaskadierendes Update durchgeführt?

UPDATE "MySchema"."MyTable" CASCADE 
SET user_name = "John Smith" 
WHERE user_id = 1 

Ist das möglich?

Antwort

3

In Postgres (und anderen RDBMs) gelten kaskadierende Aktualisierungen ausschließlich für Fremdschlüssel. Beispiel:

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) 

In der Tat sind andere Optionen nicht erforderlich. Wenn Sie dies für eine Spalte tun müssen, die kein Fremdschlüssel ist, bedeutet dies, dass das Modell schlecht entworfen ist (es ist nicht normalized).

+0

Diese Antwort ist nützlich, weil, obwohl ich bereits wusste, wie es auf diese Weise funktioniert, könnte es jemand anderen verwirrt über kaskadierende Updates zu helfen. –

+0

Enthält es falsche oder irreführende Informationen? Verdient Downvoting? – klin

+0

Ich habe es hochgestuft. Ich weiß nicht, warum jemand anderes es abgelehnt hat. –

Verwandte Themen