¿Por qué un TRUNCADO no mygroup
funciona? Aunque tengo ON DELETE CASCADE SET
tengo:
ERROR 1701 (42000): No se puede truncar una tabla de referencia en una restricción de clave externa (
mytest
.instance
, La restricción deinstance_ibfk_1
clave externa (GroupID
) REFERENCIASmytest
.mygroup
(ID
))
drop database mytest;
create database mytest;
use mytest;
CREATE TABLE mygroup (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE instance (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
GroupID INT NOT NULL,
DateTime DATETIME DEFAULT NULL,
FOREIGN KEY (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE,
UNIQUE(GroupID)
) ENGINE=InnoDB;
mysql
foreign-keys
constraints
truncate
dml
usuario391986
fuente
fuente
Sí tu puedes:
Con estas declaraciones, corre el riesgo de dejar filas en sus tablas que no cumplan con las
FOREIGN KEY
restricciones.fuente
;
). Esto se debe a que cada nueva llamada SQL web restablecerá elFOREIGN_KEY_CHECKS
1.Simplemente lo haría con:
fuente
DELETE
funciona más lento queTRUNCATE
. Pero dado que esta acción generalmente se realiza solo en raras ocasiones, esto no importa.DELETE
puede ser absolutamente brutal si tiene demasiadas filas, ya que golpea los registros, mientras queTRUNCATE
simplemente elimina los datos. Realmente depende del caso de uso.error 1175: You are using safe update mode,...
cláusula de cambio de eliminación paraDELETE FROM mydb.mytable where id != 0
que sea perfecta.tu puedes hacer
fuente
mytable
Según la documentación de mysql , TRUNCATE no se puede usar en tablas con relaciones de clave externa. No existe una alternativa completa AFAIK.
Dejar caer la restricción todavía no invoca ON DELETE y ON UPDATE. La única solución que puedo pensar en ATM es:
Parece que TRUNCATE en MySQL aún no es una característica completa (tampoco invoca disparadores).Ver comentariofuente
TRUNCATE
está incompleto: no se supone que truncar invoque desencadenantes, etc. Si lo hiciera, ¡sería lo mismoDELETE
! Es independiente de las filas, por lo tanto, no puede realizar operaciones relacionadas con las filas (como invocar desencadenantes o examinar claves externas). Funciona de la misma manera en Oracle y SQL Server .Fácil si estás usando phpMyAdmin.
Simplemente desmarque la
Enable foreign key checks
opción en laSQL
pestaña y ejecuteTRUNCATE <TABLE_NAME>
fuente
Si bien se hizo esta pregunta, no lo sabía, pero ahora si usa phpMyAdmin, simplemente puede abrir la base de datos y seleccionar las tablas que desea truncar.
Empty
opción debajo del encabezadoDelete data or table
.Enable foreign key checks
. Simplemente anule la selección y presione elYes
botón y las tablas seleccionadas se truncarán.Tal vez internamente ejecuta la consulta sugerida en la respuesta del usuario 447951 , pero es muy conveniente usarla desde la interfaz phpMyAdmin.
fuente
Probado en la base de datos MYSQL
Solución 1:
Solución 2:
Esto funciona para mi. Espero que esto también te ayude. Gracias por hacer esta pregunta.
fuente
La respuesta es de hecho la proporcionada por zerkms , como se indica en la Opción 1 :
La parte difícil es eliminar restricciones , por lo que quiero decirte cómo, en caso de que alguien necesite saber cómo hacerlo:
Ejecute la
SHOW CREATE TABLE <Table Name>
consulta para ver cuál es el nombre de su CLAVE EXTRANJERA (marco rojo en la imagen de abajo):Ejecutar
ALTER TABLE <Table Name> DROP FOREIGN KEY <Foreign Key Name>
. Esto eliminará la restricción de clave externa.Suelte el índice asociado (a través de la página de estructura de la tabla) y listo.
para volver a crear claves foráneas:
fuente
Solo usa CASCADE
Pero prepárate para borrados en cascada)
fuente
Si el motor de la base de datos para tablas difiere, obtendrá este error, así que cámbielo a InnoDB
fuente
Obtener el antiguo estado de verificación de clave externa y el modo sql son la mejor manera de truncar / soltar la tabla como lo hace Mysql Workbench mientras se sincroniza el modelo con la base de datos.
fuente