J'ai les 2 tableaux suivants:
CREATE TABLE `personal_info` (
`p_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`initials` text NOT NULL,
`surname` text NOT NULL,
`home_lang` int(11) NOT NULL,
PRIMARY KEY (`p_id`),
KEY `home_lang` (`home_lang`),
CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=latin1
CREATE TABLE `language_list` (
`ll_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
PRIMARY KEY (`ll_id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1
J'essaie de supprimer une colonne d'une table avec les éléments suivants:
ALTER TABLE `personal_info` DROP `home_lang`
Mais je ne peux pas le faire car je reçois cette erreur:
#1025 - Error on rename of '.\MyDB\#sql-112c_82' to '.\MyDB\personal_info' (errno: 150)
J'ai essayé de supprimer d'abord l'index puis de supprimer la colonne avec ceci:
ALTER TABLE personal_info DROP INDEX home_lang
Mais alors j'obtiens l'erreur suivante:
#1553 - Cannot drop index 'home_lang': needed in a foreign key constraint
J'ai donc essayé de supprimer la clé étrangère:
ALTER TABLE personal_info DROP FOREIGN KEY home_lang
Mais reçu cette erreur:
#1025 - Error on rename of '.\MyDB\personal_info' to '.\MyDB\#sql2-112c-8d' (errno: 152)
J'ai également essayé de définir d'abord toutes les valeurs sur null:
update personal_info set home_lang = null
Mais a ensuite reçu cette erreur:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`MyDB`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`))
Et maintenant je suis coincé. J'ai essayé plusieurs choses, mais je n'arrive pas à supprimer la colonne. Je ne suis pas autorisé à modifier la base de données autrement qu'en supprimant la colonne.
Votre syntaxe DROP FOREIGN KEY
Utilise le mauvais nom de clé. Il essaie de supprimer votre index "ordinaire" dans le champ home_lang
. Ce n'est PAS la clé étrangère elle-même.
CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)
^^^^^^^^^^^^^^^^^^^^^--- THIS is the name of the foreign key
Essayer:
ALTER TABLE personal_info DROP FOREIGN KEY `personal_info_ibfk_1`
Utilisez la requête ci-dessous pour trouver le nom de la clé étrangère.
SHOW CREATE TABLE forms_main;
Puis une fois que vous avez obtenu la clé, exécutez la commande drop foreign key
alter TABLE `forms_main`
drop FOREIGN key `forms_main_ibfk_1`;
Exécutez ensuite la commande drop column
ALTER TABLE `forms_main` DROP `company_id`;
MODIFIER TABLE db_name
.table_name
DROP FOREIGN KEY foreign_key
; ALTER TABLE test
.exam
DROP INDEX id
;