我有这个触发器:
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也一样)
那么我怎样才能做到这一点?
答案 0 :(得分:0)
您可以创建一个“BEFORE”触发器,将值设置为0,并将“AFTER”触发器设置为已有的,而不是默认值。
插入第一行时,“before”触发器会将Codice_Lezione的值设置为0,然后“after”触发器将其设置为1.
对于第二行,“before”触发器将Codice_Lezione的值设置为0,然后“after”触发器将其设置为2.等等。
如果这不起作用,请告诉我。