Quiero eliminar restricciones de mi tabla. Mi consulta es:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Pero recibí un error:
#1064
- Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para obtener la sintaxis correcta para usar cerca de 'restricciónFK_tbl_magazine_issue_mst_users
' en la línea 1
mysql
foreign-keys
constraints
alter
deepu sankar
fuente
fuente
CHECK
restricción, no hay necesidad de eliminarla porque no se crea una restricción real. Puede seleccionarinformation_schema.table_constraints
para verificar, e incluso puede ejecutaradd constraint
una y otra vez sin ningún error. MySQL no admiteCHECK
restricciones, pero permite que el SQL tenga la intención de crearlas (sin crear las restricciones).Respuestas:
Mysql tiene una sintaxis especial para eliminar restricciones de clave externa:
fuente
alter table .. drop constraint
. MySQL es el extraño, parece.Tuve el mismo problema y tuve que resolver con este código:
fuente
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
No existe tal cosa como
DROP CONSTRAINT
en MySQL. En su caso, podría usarDROP FOREIGN KEY
en su lugar.fuente
Si la restricción no es una clave externa, por ejemplo. uno agregado usando 'RESTRICCIÓN ÚNICA (colA, colB)' entonces es un índice que puede eliminarse usando
ALTER TABLE ... DROP INDEX ...
fuente
También es bueno, puede deshabilitar temporalmente todas las comprobaciones de clave externa de una base de datos mysql:
SET FOREIGN_KEY_CHECKS=0;
y habilitarlo nuevamente:SET FOREIGN_KEY_CHECKS=1;
fuente
Para agregar un poco a la respuesta de Robert Knight, ya que el título de la publicación en sí no menciona claves externas (y la suya no tiene ejemplos de código completos y dado que los bloques de código de comentarios de SO no se muestran tan bien como el código de las respuestas bloques), agregaré esto para restricciones únicas . Cualquiera de estos funciona para eliminar la restricción:
o
fuente
Algunos ORM o marcos utilizan una convención de nomenclatura diferente para las claves externas que la predeterminada
FK_[parent table]_[referenced table]_[referencing field]
, porque pueden modificarse.Laravel, por ejemplo, se utiliza
[parent table]_[referencing field]_foreign
como convención de nomenclatura. Puede mostrar los nombres de las claves externas utilizando esta consulta, como se muestra aquí :Luego, elimine la clave externa ejecutando la consulta DROP FOREIGN KEY antes mencionada y su nombre propio.
fuente
Para aquellos que vienen aquí usando MariaDB:
Tenga en cuenta que MariaDB permite sentencias DROP CONSTRAINT en general, por ejemplo, para descartar restricciones de verificación:
https://mariadb.com/kb/en/library/alter-table/
fuente
CONSTRAINT CHECK(a > b)
. Para restricciones de clave externa, parece que todavía necesita laDROP FOREIGN KEY
sintaxis, al menos en MariaDB versión 10.2fuente
No hay
DROP CONSTRAINT
en MySql. Esto funciona como magia en mysql 5.7fuente
La forma más sencilla de eliminar la restricción es usar la sintaxis
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
introducida en MySQL 8.0.19 :demostración de violín db <>
fuente
esto funcionará en MySQL para eliminar restricciones
fuente
DROP PRIMARY KEY
No debería funcionar.DROP FOREIGN KEY
funciona pero necesita especificar a quiéndrop
. Por ejemploALTER TABLE tablename DROP FOREIGN KEY id_name_fk