Changement de MySQL clé primaire lors de la clé étrangère contraintes existent

J'ai deux déjà existants, les tableaux qui à l'air (en partie) à peu près comme ceci:

CREATE TABLE parent (
    old_pk CHAR(8) NOT NULL PRIMARY KEY
) ENGINE=InnoDB;

CREATE TABLE child (
    parent_key CHAR(8),
    FOREIGN KEY (parent_key) REFERENCES parent(old_pk)
        ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;

Je veux ajouter une nouvelle auto-incrémentation entier id colonne de parent et de l'utiliser en tant que clé primaire au lieu de cela, tout en gardant old_pk comme une clé unique et permettant à d'autres tables comme child de référence dans les contraintes de clé étrangère. Malheureusement, il suffit de dire ALTER TABLE parent DROP PRIMARY KEY ne fonctionne pas:

Code D'Erreur : 1025

Erreur sur renommer". /données/#sql-4013_70f5e' à './données/parent' (errno: 150)

Quelques recherches sur google suggère que c'est en raison de la référence de clé étrangère de child. En fait, j'ai besoin d'un moyen de dire à MySQL "utiliser cette autre colonne comme clé primaire, mais n'oubliez pas l'unique clé "de l'original". Est-il un moyen pour accomplir cette, autre que juste de laisser tomber les contraintes de clé de child et de rétablir par la suite?

Suppose que je doit modifier les tables en place, plutôt que de créer des copies avec les mêmes données et l'échange d'eux plus tard. J'ai essayé d'utiliser SET FOREIGN_KEY_CHECKS = 0 avant de modifier le tableau, mais il ne semble pas aider.

c'est pourquoi je ne fais pas visible par l'utilisateur de la clé primaire (je suis pour la substitution de la clé primaire de l'obtenir-aller), l'utilisateur de l'évolution des exigences sont un mal de tête, mais il est bon de savoir que vous faites de votre utilisation de base de données de substitution clé primaire en.wikipedia.org/wiki/Surrogate_key

OriginalL'auteur wisnij | 2009-07-27