162 votes

MySQL SUR un DOUBLE de la CLÉ de mise à JOUR pour insérer plusieurs lignes dans une seule requête

J'ai une requête sql où je veux insérer plusieurs lignes dans une seule requête. j'ai donc utilisé quelque chose comme:

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );

Le problème est que lorsque j'exécute cette requête, je veux vérifier si une clé UNIQUE (ce qui n'est pas la CLÉ PRIMAIRE), par exemple. 'nom' dans le cas ci-dessus, doivent être vérifiées et si ce nom existe déjà, l'ensemble de la ligne doit être mis à jour sinon inséré.

Par exemple, ci dessous, par exemple., si la "Katrina" est déjà présent dans la base de données, l'ensemble de la ligne, indépendamment du nombre de domaines, doit être mis à jour. De nouveau si "Samia" n'est pas présent, la ligne doit être insérée.

J'ai pensé à utiliser:

INSERT INTO beautiful (name, age)
      VALUES
      ('Helen', 24),
      ('Katrina', 21),
      ('Samia', 22),
      ('Hui Ling', 25),
      ('Yumie', 29) ON DUPLICATE KEY UPDATE

Ici, c'est le piège. Je me suis coincé et confus de la façon de procéder. J'ai plusieurs lignes à insérer/mettre à jour à la fois. Merci de me donner la direction. Merci.

395voto

Peter Lang Points 25877

La Documentation mentionne VALUES à se référer à de nouvelles valeurs:

INSERT INTO beautiful (name, age)
      VALUES
      ('Helen', 24),
      ('Katrina', 21),
      ('Samia', 22),
      ('Hui Ling', 25),
      ('Yumie', 29)
ON DUPLICATE KEY UPDATE
     age = VALUES(age),
     ...

0voto

a1ex07 Points 23965

Vous pouvez utiliser le Remplacer au lieu de l'INSÉRER ... SUR un DOUBLE de la CLÉ de mise à JOUR.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: