Salut,
Je rencontre un petit soucis un peu particulier, que j'aurais voulu résoudre en utilisant des VIEW, mais cela ne fonctionne pas comme je l'aurais pensé.
Voici mon problème : j'ai une table définie de la manière suivante :
1 2 3 4 5 6 7 8
| CREATE TABLE test
(
id bigint NOT NULL AUTO_INCREMENT,
num bigint NOT NULL default 0,
text varchar(20),
PRIMARY KEY(id, num)
); |
Elle contient par exemple les valeurs suivantes :
1 2 3 4 5 6 7
| +----+-----+-------+
| id | num | text |
+----+-----+-------+
| 1 | 1 | t1 |
| 2 | 1 | t2 |
| 3 | 2 | t1 |
+----+-----+-------+ |
Je voudrais accéder de manière transparent seulement aux éléments avec num=1. J'utilise pour cela une VIEW définie comme ceci :
1 2 3 4 5 6 7
| CREATE OR REPLACE
ALGORITHM=MERGE
VIEW view1
AS
SELECT id, text
FROM test
WHERE num = 1 |
Juste là tout va bien et ma vue me retourne bien ce que je veux :
1 2 3 4 5 6
| +----+-------+
| id | text |
+----+-------+
| 1 | t1 |
| 2 | t2 |
+----+-------+ |
Le problème vient du fait que je voudrais faire des inserts sur cette vue :
insert into view1(text) values('essai');
Comme le champs 'num' n'est pas spécifié, il prend sa valeur par défaut (0), et donc le résultat n'apparait pas dans la vue
En fait j'aurais voulu que lorsqu'on effectue des INSERT depuis la vue "view1", le champ "num" prennent automatiquement la valeur 1.
J'ai pensé à un trigger, mais ils ne peuvent pas être utilisé sur une VIEW, et en le positionnant sur la table je n'arrive pas à déterminer si l'INSERT se fait depuis une VIEW ou pas.
Si quelqu'un a une idée de piste ou une suggestion...
a++
PS : Je précise que je ne peux pas changer la valeur par défaut de la colonne, car je vais avoir plusieurs VIEW du même style.
Partager