DROP TABLE IF EXISTS `articles`; CREATE TABLE IF NOT EXISTS `articles` ( ...
CREATE TABLE IF NOT EXISTS `familles` ( ...
INSERT INTO `familles` (`ID`, `Intitule`) VALUES (1, 'Guitare'), (2, 'Accessoire');Sauf que ta table existe déjà donc elle n'est pas créer(ou recréer), donc il passe a la suite c'est a dire au "INSERT INTO" mais comme ta table contient déja des ligne avec les même ID il met une erreur car la colonne ID est une en clé primaire (c'est a dire qu'elle est UNIQUE et indexé) donc tu ne peux pas avoir deux fois la valeur "1" ou "2".
-- =========================== -- Création de la base `Essai` -- =========================== DROP DATABASE IF EXISTS `essai`; CREATE DATABASE IF NOT EXISTS `essai` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_general_ci`; USE `essai`; -- ==================== -- Procedure `validate` -- ==================== DROP PROCEDURE IF EXISTS Validate_Insert; DELIMITER $$ CREATE PROCEDURE Validate_Insert( IN Id smallint, IN Intitule varchar(255) ) DETERMINISTIC NO SQL BEGIN DECLARE msg varchar(255); IF (Id = 4) THEN set msg = concat('Insertion interdite : ', cast(Id as char), ' --- ', cast(Intitule as char)); SIGNAL SQLSTATE VALUE '07777' SET MESSAGE_TEXT = msg, MYSQL_ERRNO = 7777; END IF; END$$ DELIMITER ; -- ================================ -- Structure de la table `familles` -- ================================ DROP TABLE IF EXISTS `familles`; CREATE TABLE IF NOT EXISTS `familles` ( `Id` smallint UNSIGNED DEFAULT '0' NOT NULL, `Intitule` varchar(255) COLLATE `utf8_unicode_ci` DEFAULT ' ' NOT NULL ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ============================ -- Index de la table `familles` -- ============================ ALTER TABLE `familles` ADD CONSTRAINT PRIMARY KEY (`Id`); -- =============================== -- Trigger sur la table `familles` -- =============================== DROP TRIGGER IF EXISTS `familles.test`; DELIMITER $$ CREATE TRIGGER `test` BEFORE INSERT ON familles FOR EACH ROW BEGIN CALL Validate_Insert(NEW.Id, NEW.Intitule); END$$ DELIMITER ; -- ============================== -- Contenu de la table `familles` -- ============================== INSERT INTO `familles` (`Id`, `Intitule`) VALUES (1, 'Guitare'), (2, 'Accessoire'); COMMIT; -- ==================================== -- Structure de la Table des `Articles` -- ==================================== DROP TABLE IF EXISTS `articles`; CREATE TABLE IF NOT EXISTS `articles` ( `reference` char(5) COLLATE `utf8_unicode_ci` DEFAULT ' ' NOT NULL, `prix` decimal(5,2) DEFAULT '0.0' NOT NULL, `Id` smallint UNSIGNED DEFAULT '0' NOT NULL, `description` varchar(255) COLLATE `utf8_unicode_ci` DEFAULT ' ' NOT NULL ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ============================ -- Index de la table `articles` -- ============================ ALTER TABLE `articles` ADD CONSTRAINT PRIMARY KEY (`reference`); ALTER TABLE `articles` ADD INDEX `Clef_2` (`Id`); ALTER TABLE `articles` ADD CONSTRAINT FOREIGN KEY (`Id`) REFERENCES familles(Id) ON UPDATE CASCADE ON DELETE RESTRICT; -- ============================== -- Contenu de la table `articles` -- ============================== INSERT INTO `articles` (`reference`, `prix`, `description`, `Id`) VALUES ('AMP32', 800.00, 'Ampli guitare', 2), ('ART56', 600.00, 'Guitare Archtop', 1), ('GIB78', 400.00, 'Guitare Gibson', 1), ('MIC86', 200.00, 'Micro guitare', 2); COMMIT; -- ============================= -- Structure de la vue `details` -- ============================= DROP VIEW IF EXISTS `details`; CREATE VIEW `details` AS SELECT ar.reference, ar.prix, ar.description, fa.Intitule FROM articles as ar, familles as fa WHERE ar.ID = fa.id; -- ============================== -- Contenu de la table `familles` -- ============================== INSERT INTO `familles` (`Id`, `Intitule`) VALUES (3, 'Mediator'), (4, 'Batterie');