web-dev-qa-db-de.com

MySQL RESTRICT und KEINE AKTION

Was ist der Unterschied in einem MySQL-FK zwischen RESTRICT und NO ACTION? Aus dem Doc scheinen sie genau das gleiche zu sein. Ist das der Fall? Wenn ja, warum beides?

52
Erebus

Aus der MySQL-Dokumentation: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

Einige Datenbanksysteme haben verzögerte Prüfungen und NO ACTION ist ein aufgeschobener Scheck. In MySQL werden Fremdschlüsseleinschränkungen sofort überprüft, also NO ACTION ist dasselbe wie RESTRICT.

44
Anthony Accioly

Es muss der Standard-SQL-Syntax entsprechen. Wie das Handbuch sagt: (Betonung meiner)

NO ACTION: Ein Schlüsselwort aus Standard-SQL . In MySQL gleichbedeutend mit RESTRICT. Der MySQL Server lehnt den Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle ab, wenn in der referenzierten Tabelle ein zugehöriger Fremdschlüsselwert vorhanden ist. Einige Datenbanksysteme verfügen über verzögerte Prüfungen, und NO ACTION ist eine verzögerte Prüfung. In MySQL werden Fremdschlüsseleinschränkungen sofort überprüft, sodass NO ACTION mit RESTRICT identisch ist.

16
Nanne

Sie sind in MySQL identisch.

Im SQL 2003-Standard gibt es 5 verschiedene Referenzaktionen:

CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT

Der Unterschied zwischen NO ACTION und RESTRICT ist das nach dem Standard, NO ACTION wird zurückgestellt, während RESTRICT sofort handelt.

16
Wolph