136 votes

La contrainte CHECK dans MySQL ne fonctionne pas

J'ai d'abord créé une table comme

CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);

et a ensuite inséré des valeurs dans ce tableau

INSERT INTO Customer values ('-2','abc','zz');

MySQL ne montre pas d'erreur, il a accepté les valeurs.

0 votes

Partiellement d'accord. Étant donné que vous avez essayé de l'utiliser, on peut supposer que vous posiez les deux questions. En fait, la réponse que vous avez acceptée explique principalement pourquoi il ne fonctionne pas.

1 votes

Vous pouvez voter sur cette demande de fonctionnalité : bugs.mysql.com/bug.php?id=3464 mais elle n'a pas reçu d'attention depuis une décennie.

11 votes

Vous pouvez utiliser les contraintes CHECK dans MariaDB à partir de version 10.2.1 .

1voto

James Points 886

Les contraintes de contrôle sont prises en charge à partir de la version 8.0.15 (à venir).

https://bugs.mysql.com/bug.php?id=3464

[23 Jan 16:24] Paul Dubois

Posté par le développeur : Corrigé dans la version 8.0.15.

Auparavant, MySQL autorisait une forme limitée de la syntaxe de la contrainte CHECK, mais l'analysait et l'ignorait. MySQL implémente maintenant les fonctionnalités de base des contraintes CHECK de table et de colonne, pour tous les moteurs de stockage. Les contraintes sont définies à l'aide des instructions CREATE TABLE et ALTER TABLE.

1voto

sidtj Points 367

Mise à jour vers MySQL 8.0.16 pour utiliser checks :

À partir de MySQL 8.0.16, CREATE TABLE permet d'utiliser les fonctionnalités de base des contraintes CHECK de table et de colonne pour tous les moteurs de stockage. et des contraintes CHECK de colonnes, pour tous les moteurs de stockage. CREATE TABLE autorise la syntaxe de contrainte CHECK suivante, tant pour les contraintes de table et les contraintes de colonnes

Documentation sur les vérifications MySQL

-2voto

Kanagu Points 120

Essayer avec set sql_mode = 'STRICT_TRANS_TABLES' OU SET sql_mode='STRICT_ALL_TABLES'

2 votes

Qui n'aide pas du tout (MySQL 5.6), il empêche d'entrer des données de type faux mais pas d'entrer des données qui ne correspondent pas à la norme. CHECK contrainte

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:

X