Maison >base de données >tutoriel mysql >Comment fonctionnent les contraintes MySQL CHECK et comment puis-je garantir la validation des données dans les versions plus anciennes et plus récentes ?

Comment fonctionnent les contraintes MySQL CHECK et comment puis-je garantir la validation des données dans les versions plus anciennes et plus récentes ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 10:32:42344parcourir

How Do MySQL CHECK Constraints Work, and How Can I Ensure Data Validation in Older and Newer Versions?

VÉRIFIER les contraintes dans MySQL

Lorsque vous essayez d'ajouter une contrainte CHECK à une table MySQL, vous pouvez rencontrer un comportement inattendu lors de l'insertion de données qui violent la contrainte. Cet article approfondira les subtilités des contraintes CHECK dans MySQL et fournira une solution pour appliquer la validation.

Dans les versions antérieures de MySQL (jusqu'à la version 8.0.15), les contraintes CHECK étaient définies mais non appliquées. Comme indiqué dans le manuel de référence MySQL : "La clause CHECK est analysée par tous les moteurs de stockage mais ignorée

."

Solutions pour MySQL 8.0.15 et versions antérieures

Pour forcer la validation des données en l'absence de support natif de la contrainte CHECK, vous pouvez créer un déclencheur :

<code class="language-sql">DELIMITER //

CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer
FOR EACH ROW
BEGIN
  IF NEW.SD < 0 THEN
    SET NEW.SD = 0;
  END IF;
END //

DELIMITER ;</code>

Ce déclencheur interceptera toute instruction INSERT et si la valeur de la colonne SD est inférieure à 0, elle sera modifiée à 0, garantissant que la contrainte est maintenue.

VÉRIFIER les contraintes pour MySQL 8.0.16 et versions ultérieures

MySQL 8.0.16 introduit la prise en charge complète des contraintes CHECK. Pour définir les contraintes CHECK dans la version 8.0.16 ou ultérieure, utilisez la syntaxe suivante :

<code class="language-sql">CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);</code>

MySQL appliquera désormais des contraintes et empêchera l'insertion de données qui violent les contraintes.

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