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 ![:(](https://www.developpez.net/forums/images/smilies/icon_sad.gif)
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...
![:merci:](https://www.developpez.net/forums/images/smilies/merci.png)
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