¿Cómo eliminar restricciones de mi tabla MySQL?


Quiero eliminar restricciones de mi tabla. Mi pregunta es:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

Pero tengo un error:

#1064 - Tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión de MySQL server para la sintaxis correcta para usar cerca de 'constraint FK_tbl_magazine_issue_mst_users' en la línea 1

Author: shA.t, 2013-01-02

10 answers

Mysql tiene una sintaxis especial para eliminar restricciones de clave foránea:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
 363
Author: Bohemian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 10:42:04

Tuve el mismo problema y tengo que resolver con este código:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
 40
Author: Wellington Lorindo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-19 15:40:52

No hay tal cosa como DROP CONSTRAINT en MySQL. En su caso, podría usar DROP FOREIGN KEY en su lugar.

 24
Author: Lothar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-02 12:35:42

Si la restricción no es una clave foránea, por ejemplo. uno añadido usando 'UNIQUE CONSTRAINT (colA, colB)' entonces es un índice que puede ser eliminado usando ALTER TABLE ... DROP INDEX ...

 11
Author: Robert Knight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-06 10:58:33

Para añadir un poco a la respuesta de Robert Knight, ya que el título de la publicación en sí no menciona claves foráneas (y ya que la suya no tiene muestras de código completas y ya que los bloques de código de comentario de SO no se muestran tan bien como los bloques de código de las respuestas), agregaré esto para restricciones únicas. Cualquiera de estos funciona para eliminar la restricción:

ALTER TABLE `table_name` DROP KEY `uc_name`;

O

ALTER TABLE `table_name` DROP INDEX `uc_name`;
 3
Author: jbobbins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-04 17:34:06

También es bueno, puede desactivar temporalmente todas las comprobaciones de claves foráneas de una base de datos mysql: SET FOREIGN_KEY_CHECKS=0; Y para habilitarlo de nuevo: SET FOREIGN_KEY_CHECKS=1;

 2
Author: roelleor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-20 13:12:34
  1. Ir a la vista de estructura de la tabla
  2. Verá la opción 2 en la parte superior a.Estructura de la tabla b. Vista de relación.
  3. Ahora haga clic en Vista de relación, aquí puede soltar su restricción de clave externa. Tendrás toda la relación aquí.
 1
Author: Tony stark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-22 06:38:11

Algunos frameworks o frameworks usan una convención de nomenclatura diferente para las claves foráneas que la predeterminada FK_[parent table]_[referenced table]_[referencing field], porque pueden ser alteradas.

Laravel por ejemplo usa [parent table]_[referencing field]_foreign como convención de nomenclatura. Puede mostrar los nombres de las claves foráneas usando esta consulta, como se muestra aquí :

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

Luego elimine la clave foránea ejecutando la consulta de CLAVE foránea antes mencionada y su nombre propio.

 1
Author: piscator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:31

Para aquellos que vienen aquí usando MariaDB:

Tenga en cuenta que MariaDB permite SOLTAR sentencias DE RESTRICCIÓN en general, por ejemplo para soltar restricciones de verificación:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

Https://mariadb.com/kb/en/library/alter-table /

 0
Author: Markus Barthlen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 15:33:55

Esto funcionará en MySQL para eliminar restricciones

alter table tablename drop primary key;

alter table tablename drop foreign key;
 -5
Author: Ranjitha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-03 07:13:43