Maison >base de données >tutoriel mysql >Comment garantir des lignes uniques lors de l'insertion de données dans MySQL ?

Comment garantir des lignes uniques lors de l'insertion de données dans MySQL ?

DDD
DDDoriginal
2024-12-25 21:27:09765parcourir

How to Ensure Unique Rows When Inserting Data into MySQL?

Insertion conditionnelle MySQL : garantir l'unicité des lignes

MySQL fournit des mécanismes polyvalents pour l'insertion de données, vous permettant d'implémenter des insertions conditionnelles qui empêchent les lignes en double.

Un scénario implique une table nommée x_table avec des colonnes instance, user et item, où l'instance est unique. Pour insérer une nouvelle ligne dans x_table uniquement si la combinaison utilisateur et élément n'existe pas déjà, suivez ces étapes :

Utilisation de la syntaxe INSERT...SELECT

Si votre version MySQL prend en charge la sélection à partir d'autres tables lors de l'insertion, considérez la requête suivante :

INSERT INTO x_table(instance, user, item)
SELECT 919191, 123, 456
FROM dual
WHERE NOT EXISTS (
    SELECT * FROM x_table
    WHERE user = 123 AND item = 456
);

Dans cette requête, dual est une table à une seule ligne qui garantit la disponibilité d'une ligne valide, tandis que le NOT La condition EXISTS vérifie l’absence de lignes en double. Si aucune correspondance n'est trouvée, la nouvelle ligne est insérée.

Exploration de l'instruction MERGE

Alternativement, l'instruction MERGE fournit un outil puissant pour les insertions conditionnelles. Sa syntaxe est la suivante :

MERGE INTO x_table AS target
USING (
    SELECT 919191 AS instance, 123 AS user, 456 AS item
) AS source
ON (target.user = source.user AND target.item = source.item)
WHEN NOT MATCHED THEN INSERT VALUES (source.instance, source.user, source.item);

Dans ce cas, la clause USING précise les valeurs à insérer, tandis que la clause ON établit les critères de correspondance. Si aucune ligne correspondante n'existe dans la table cible (x_table), INSERT est effectué.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn