Bonjour,

Je possede une base de donnèes pour gerer utilisateur, boite de messagerie, message. Je crèè quelque trigger pour automatiser un peut la gestion:

- sur creation d'un utilisateur, creation de boite de messagerie standard
- sur suppression d'un utilisateur, suppression de ses boite de messagerie
- sur suppression des boite de messagerie, suppression de leur message

lors de la creation du 2ème(ou plus) utilisateur les boite de messagerie ne peuvent etre generer car la clef '0' est dupliquer.
la 1ere chose auquel on pense est "on assigne tout le temp 0 en clef primaire de boite de messagerie" mais non....(ou sinon je ne comprend plus se que je tape)

Creation de Table
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
25
26
27
28
29
30
31
32
33
34
35
36
37
DROP DATABASE IF EXISTS `mediamanager`;
CREATE DATABASE `mediamanager`;
USE `mediamanager`;
 
CREATE TABLE user(
	id_user VARCHAR(45) NOT NULL,
	userName VARCHAR(45) NOT NULL,
	password VARCHAR(45) NOT NULL,
	email VARCHAR(45) NOT NULL,
	question VARCHAR(45) NOT NULL,
	reponse VARCHAR(45) NOT NULL,
	PRIMARY KEY (`id_user`)
) ENGINE=InnoDB;
 
CREATE TABLE boite_message(
	id_boite_message INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
	id_user VARCHAR(45) NOT NULL,
	nom VARCHAR(45) NOT NULL,
	obligatoire BOOLEAN NOT NULL,
	PRIMARY KEY(`id_boite_message`)
) ENGINE=InnoDB;
 
CREATE TABLE message(
	id_message INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
	id_expediteur VARCHAR(45) NOT NULL,
	id_boite_message INTEGER UNSIGNED NOT NULL,
	titre VARCHAR(45) NOT NULL,
	corp TEXT NOT NULL,
	date DATETIME,
	lu BOOLEAN NOT NULL,
	PRIMARY KEY(`id_message`)
) ENGINE=InnoDB;
 
CREATE VIEW liste_message AS
	SELECT b.id_user AS 'id_user', b.id_boite_message, u1.userName AS 'expediteur', m.id_message, titre, corp, DATE_FORMAT(date,GET_FORMAT(DATE,'EUR')) AS 'date', lu
	FROM user u1, user u2, boite_message b, message m
	WHERE m.id_expediteur = u1.id_user AND u2.id_user = b.id_user AND b.id_boite_message = m.id_boite_message;
Creation des Triggers et Insertion d'un utilisateur:
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
25
26
27
28
29
30
31
32
33
USE `mediamanager`;
 
DELIMITER |
 
/* CREATION UTILISATEUR => CREATION BOITE DE MESSAGERIE STANDARD */
CREATE TRIGGER BoiteMessageStandard
 AFTER INSERT ON user
 FOR EACH ROW BEGIN
	INSERT INTO boite_message (id_user, nom, obligatoire) VALUES(NEW.id_user, 'Reception', '1');
	INSERT INTO boite_message (id_user, nom, obligatoire) VALUES(NEW.id_user, 'Emission', '1');
	INSERT INTO boite_message (id_user, nom, obligatoire) VALUES(NEW.id_user, 'Corbeille', '1');
 END;
|
 
/* SUPPRESSION UTILISATEUR => SUPPRESSION BOITE MESSAGERIE */
CREATE TRIGGER PurgeBoiteMessage
 AFTER DELETE ON user
 FOR EACH ROW BEGIN
    DELETE FROM boite_message WHERE id_user = DELETED.id_user;
 END;
|
 
/* SUPPRESSION BOITE MESSAGE => SUPPRESSION MESSAGE */
CREATE TRIGGER PurgeMessage
 AFTER DELETE ON boite_message
 FOR EACH ROW BEGIN
	DELETE FROM message WHERE id_boite_message = DELETED.id_boite_message;
 END;
|
 
DELIMITER ;
 
INSERT INTO user VALUES('1', 'Admin', 'admin', 'mail@mail.com', 'Quel est le nom de l''administrateur?', 'TRUC');
merci pour votre aide