Ho due tabelle MySQL: collections
e privacy_level
.
li definiscono con una chiave esterna rapporto come tale:Esatto Significato della chiave esterna di MySQL 'on delete restrict' Clausola
CREATE TABLE collections (
coll_id smallint NOT NULL AUTO_INCREMENT UNSIGNED,
name varchar(30) NOT NULL,
privacy tinyint NOT NULL UNSIGNED DEFAULT '0',
PRIMARY KEY(coll_id),
INDEX(privacy),
FOREIGN KEY fk_priv (privacy) REFERENCES privacy_level (level) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB;
CREATE TABLE privacy_level (
level tinyint NOT NULL UNSIGNED,
name varchar(20) NOT NULL,
PRIMARY KEY (level)
) ENGINE InnoDB;
La mia domanda riguarda la clausola ON DELETE RESTRICT
e non ho potuto derivare la risposta dal manuale in linea o una ricerca su Google.
Ciò significa che è possibile mai eliminare una riga da privacy_level
?
O, vuol dire che io non riesco a eliminare una riga da privacy_level
se una riga da collections.privacy
ha un valore che è lo stesso di un valore in privacy_level.level
?
Cioè, se privacy_level
ha level = 2
, name = 'top secret'
ma nessuna voce in collections.Privacy ha privacy = 2
, posso cancellare il, name = 'top secret'
ingresso level = 2
? O è vietato su una base ampia colonna?
Grazie per qualsiasi intuizione.
Significa che "ON DELETE RESTRICT' è lo stesso di" ON DELETE NO ACTION "? – Shafizadeh
@Shafizadeh, leggi http://www.vertabelo.com/blog/technical-articles/on-delete-restrict-vs-on-delete-no-action –
@Bill, l'articolo dice NO ACTION è lo stesso di RESTRICT in MySQL e fa riferimento [indietro a SO] (https://stackoverflow.com/questions/5809954/mysql-restrict-and-no-action) per confermare la loro dichiarazione ... – Code4R7