salut,
je cherche à définir des colonnes à valeurs prédéfinies mais je ne trouve pas le type à utiliser...
set permet la valeur nulle meme avec NOT NULL !
enum idem
pire encore dans les deux cas si je mets a,b,c comme valeurs possible et que je tante un insert "d" ca rejette pas la requette ça insere une valeur nulle
démonstration du problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 mysql> create table t2 (t set('a','b','c') not null default 'a', t2 enum('a','b') not null default 'a') ; Query OK, 0 rows affected (0.00 sec) mysql> insert into t2 values('d',''); Query OK, 1 row affected, 2 warnings (0.00 sec) mysql> select * from t2 ; +---+----+ | t | t2 | +---+----+ | | |
bref comment faire ?
ce que je veux c'est que
par exemple soit rejetée ! car la seconde valeur n'est ni 'a' ni 'b'
Code : Sélectionner tout - Visualiser dans une fenêtre à part insert into t2 values('a','') ;
même check ne permet pas de protéger le champ.
alors quelle solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 mysql> create table t2 (t set('a','b','c') check (t='a'), t2 enum('a','b') not null default 'a') ; Query OK, 0 rows affected (0.00 sec) mysql> insert into t2 values('d',''); Query OK, 1 row affected, 2 warnings (0.00 sec) mysql> show warnings ; +---------+------+-----------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------+ | Warning | 1265 | Data truncated for column 't' at row 1 | | Warning | 1265 | Data truncated for column 't2' at row 1 | +---------+------+-----------------------------------------+ 2 rows in set (0.00 sec) mysql> select * from t2 ; +------+----+ | t | t2 | +------+----+ | | | +------+----+ 1 row in set (0.00 sec) mysql>
merci
PS: pour certaines raison il n'est pas possible d'utiliser un trigger de correction APRES ou AVANT coup !!!!
Partager