Createtablecar1(numberchar(9));QueryOK,0rowsaffected(0.32sec)mysql>Insertintocar1values('AB-235-Y"/> Createtablecar1(numberchar(9));QueryOK,0rowsaffected(0.32sec)mysql>Insertintocar1values('AB-235-Y">

Maison  >  Article  >  base de données  >  Comment utiliser VIEWS pour simuler CHECK CONSTRAINT ?

Comment utiliser VIEWS pour simuler CHECK CONSTRAINT ?

WBOY
WBOYavant
2023-08-27 14:37:091146parcourir

如何使用 VIEWS 来模拟 CHECK CONSTRAINT?

Comme nous le savons tous, MySQL prend en charge les clés étrangères pour l'intégrité référentielle, mais ne prend pas en charge les contraintes CHECK. Mais nous pouvons les simuler en utilisant des déclencheurs. Ce problème peut être résolu à l'aide de l'exemple ci-dessous -

Exemple

Supposons que nous ayons une table nommée "car1". Le numéro d'enregistrement de la syntaxe est comme deux lettres, un tiret, trois chiffres, un tiret, Deux lettres comme celle-ci -

mysql> Create table car1 (number char(9));
Query OK, 0 rows affected (0.32 sec)

mysql> Insert into car1 values('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

La valeur ci-dessus est valide, mais qu'en est-il de la valeur que nous souhaitons insérer dans la prochaine requête ?

mysql> insert into car1 values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

La valeur ci-dessus n'est pas une valeur valide car elle contient un caractère entre les nombres, ce qui viole la syntaxe fixe que nous utilisons.

Créez une VUE pour simuler CHECK CONSTRAINT pour insérer et mettre à jour des valeurs -

mysql> Create view car_invalid_check as
    -> Select * from car1 WHERE number rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
    -> with check option;
Query OK, 0 rows affected (0.12 sec)

mysql> Insert into car_invalid_check values('AB-2X5-YZ');
ERROR 1369 (HY000): CHECK OPTION failed 'query.car_invalid_check'

mysql> Insert into car_invalid_check values('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)

mysql> Update car_invalid_check SET NUMBER = 'AB-2X5-ZT';
ERROR 1369 (HY000): CHECK OPTION failed 'query.car_invalid_check'

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer