primaire existante je une table définie comme suit:mysql - Capable de saisir plusieurs valeurs, même si la nouvelle valeur est égale à une clé
CREATE TABLE `mydb`.`users` (
`userID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userName` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`createdDate` datetime NOT NULL,
`active` tinyint(1) NOT NULL,
`lastUpdatedDate` datetime NOT NULL,
PRIMARY KEY (`userID`,`userName`) USING BTREE
)
Cependant, quand je lance cette requête:
REPLACE INTO users SET userName ='Joe', active=1, lastUpdatedDate=now()
il insère plusieurs lignes avec un nom d'utilisateur Joe même s'il s'agit d'une clé primaire. Je pense que parce que userID et userName sont des clés primaires, la clé est seulement quand les deux correspondent. Toutefois, je ne peux pas supprimer la clé primaire sur l'ID utilisateur car mysql renvoie une erreur. Je veux que userName soit distinct de sorte qu'il n'y ait qu'un seul enregistrement pour chaque nom d'utilisateur, et je veux que l'instruction replace mette à jour lastUpdatedDate si le nom d'utilisateur existe déjà (ou insérez-le s'il n'existe pas). Comment puis-je accomplir cela?
Cela fonctionne maintenant que je n'ai qu'un seul enregistrement pour chaque nom d'utilisateur, mais lorsque j'exécute la commande REPLACE INTO, le champ ID utilisateur est mis à jour. Je veux que cela reste le même quand j'ai inséré l'enregistrement pour la première fois et que j'ai juste changé la valeur lastUpdatedDate. Est-ce que ce n'est pas possible? –
La requête a été modifiée pour ne pas modifier l'ID utilisateur et le paramètre createdDate lorsque les utilisateurs existent, mais uniquement pour mettre à jour lastUpdatedDate et être actifs. Vous devriez être capable d'adopter cette requête pour répondre à vos besoins spécifiques – jitter