2016-02-27 55 views
0

我有這樣的觸發器:MYSQL觸發了默認值的屬性

USE `PalestraDB`; 
DELIMITER $$ 
CREATE TRIGGER `Lezione_BINS` BEFORE INSERT ON `Lezione` FOR EACH ROW 
SET NEW.Codice_Lezione = (SELECT max(Codice_Lezione) + 1 FROM Lezione WHERE CodCorso = NEW.CodCorso); 
END 

定義在此表:

DROP TABLE IF EXISTS `PalestraDB`.`Lezione` ; 

CREATE TABLE IF NOT EXISTS `PalestraDB`.`Lezione` (
`CodCorso` INT NOT NULL, 
`Codice_Lezione` INT NOT NULL DEFAULT 0, 
`Data` DATE NOT NULL, 
`Orario` TIME NOT NULL, 
PRIMARY KEY (`Codice_Lezione`, `CodCorso`), 
INDEX `fk_Lezione_Corso1_idx` (`CodCorso` ASC), 
CONSTRAINT `fk_Lezione_Corso1` 
FOREIGN KEY (`CodCorso`) 
REFERENCES `PalestraDB`.`Corso` (`Codice_corso`) 
ON DELETE CASCADE 
ON UPDATE CASCADE) 
ENGINE = InnoDB; 

我想要做的就是計算「Codice_lezione」價值的基礎上,主鍵「CodCorso」,並有這樣的事情:

CodCorso 1 Codice_Lezione 1; 
CodCorso 1 Codice_Lezione 2; 
CodCorso 1 Codice_Lezione 3; 
CodCorso 2 Codice_Lezione 1; 
CodCorso 2 Codice_Lezione 2; 
CodCorso 3 Codice_Lezione 1; 
CodCorso 3 Codice_Lezione 2; 

等等......這工作正常,沒有默認值,如果我只添加到Codice_Lezione列,新的數字將以正確的方式計算。 但如果我再添當然當然(CodCorso代表的數量當然,Codice_Lezione過程中的教訓的數量),我沒有任何價值發現MAX(Codice_Lezione),它會給我一個錯誤。所以我想「我會把它默認爲1」。通過這種方式,先插入的工作,我得到CodCorso#和Codice_Lezione 1.第二個,雖然失敗了,給我的錯誤1062,說是關鍵#-1心病CodCorso-Codice_lezione已經存在。 (默認爲0,不同)

那麼,怎樣才能使這項工作?

回答

0

取而代之的是默認的,你可以創建一個「之前」觸發器,將值設置爲0,而「AFTER」觸發器,你已經離開。

當插入第一行,觸發「前」,將Codice_Lezione的值設置爲0,然後「之後」觸發器將其設置爲1

與第二行,「之前」觸發將設置Codice_Lezione的0值,然後是「after」觸發器將它設置爲2等等

讓我知道如果不工作。