mysql - tabla - set foreign_key_checks=0 sql server
Significado exacto de la clave externa de MySQL ''en eliminar restringir'' Cláusula (2)
También puede utilizar ON DELETE CASCADE
, lo que significa que cuando elimine el elemento primario, todos los elementos secundarios se eliminarán automáticamente, esto es útil cuando tiene una tabla asociada con otra que contiene algunos parámetros o configuraciones.
Tengo dos tablas de MySQL: collections
y privacy_level
.
Los defino con una relación de clave externa como tal:
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;
Mi pregunta es sobre la cláusula ON DELETE RESTRICT
y no pude derivar la respuesta del manual en línea o una búsqueda en Google.
¿Esto significa que nunca puedo eliminar una fila de privacy_level
?
O bien, ¿significa que no puedo eliminar una fila de privacy_level
si una fila de collections.privacy
tiene un valor que es igual a un valor en privacy_level.level
?
Es decir, si privacy_level
tiene level = 2
, name = ''top secret''
pero ninguna entrada en collections.Privacy has privacy = 2
, ¿puedo borrar el level = 2
, name = ''top secret''
? ¿O está prohibido en toda la columna?
Gracias por cualquier idea.
ON DELETE RESTRICT
significa que no puede eliminar una fila principal dada si existe una fila secundaria que haga referencia al valor de esa fila principal. Si la fila principal no tiene referencias de filas secundarias, puede eliminar esa fila primaria.
ON DELETE RESTRICT
es una sintaxis superflua , ya que este es el comportamiento predeterminado para una clave foránea de todos modos.