MYSQL使用默认值触发属性

时间:2016-02-27 14:23:29

标签: mysql triggers

我有这个触发器:

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 cor CodCorso-Codice_lezione已经存在。 (默认为0也一样)

那么我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以创建一个“BEFORE”触发器,将值设置为0,并将“AFTER”触发器设置为已有的,而不是默认值。

插入第一行时,“before”触发器会将Codice_Lezione的值设置为0,然后“after”触发器将其设置为1.

对于第二行,“before”触发器将Codice_Lezione的值设置为0,然后“after”触发器将其设置为2.等等。

如果这不起作用,请告诉我。