Je rencontre un problème avec MySQL pour une simple addition apparente d'une clé étrangère. J'ai demandé à Google, mais en vain. Ici va:Problème de clé étrangère SQL Problème
Créer première table avec:
| users | CREATE TABLE `users` (
`username` varchar(32) NOT NULL DEFAULT '',
`firstname` varchar(128) DEFAULT NULL,
`lastname` varchar(128) DEFAULT NULL,
`password` varchar(32) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
Créer seconde table avec:
| contacts | CREATE TABLE `contacts` (
`username` varchar(32) DEFAULT NULL,
`name` varchar(128) DEFAULT NULL,
`phonenumber` varchar(32) DEFAULT NULL,
`address` varchar(128) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
Maintenant je dois ajouter une clé étrangère de contacts "liens avec les 'utilisateurs'.
ALTER TABLE contacts ADD FOREIGN KEY (username) references USERS(username));
mais je reçois cette erreur: erreur 1064 (42000): Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de ')' à la ligne 1
L'objectif est évidemment de s'assurer que toutes les entrées dans 'contacts' ont une entrée 'nom d'utilisateur' correspondante dans 'utilisateurs '.
Environnement: Ubuntu 11.04, MySQL 5.1.58
Je dois être fait quelque part une erreur stupide. Suggestions bienvenues.
Cela s'est avéré être la solution réelle. Merci ypercube. – sphere4a
La solution: MyISAM ne supporte pas les clés étrangères. Fait ce InnoDB. En outre, il y avait 2 erreurs de syntaxe dans l'instruction de table ALTER ci-dessus. Il devrait se lire comme suit: ALTER TABLE contacts ADD CONTRAINT FOREIGN KEY (nom d'utilisateur) référence les utilisateurs (nom d'utilisateur); Surveillez les accolades et le nom de la table minuscule. Problème résolu. Merci les gars. J'adore ce stackoverflow. – sphere4a
@ sphere74: Les noms de tables sensibles à la casse (ou non) dépendent des paramètres d'installation: [Identifier Case Sensitivity] (http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html) –