我使用正向工程师功能自动生成我的数据库模式。有“ON DELETE 和 ON UPDATE”,我知道这指定了当引用的表更改时表中的行会发生什么。是那个触发器,还是因为它写在约束部分?部分代码如下:
-- -----------------------------------------------------
-- Table `la`.`trainers`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `la`.`trainers` (
`login` VARCHAR(20) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`first_name` VARCHAR(45) NOT NULL,
`last_name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`login`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `la`.`sexes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `la`.`sexes` (
`id` ENUM('M', 'F') NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
INSERT INTO sexes VALUES ('M'),('F');
-- -----------------------------------------------------
-- Table `la`.`athletes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `la`.`athletes` (
`pesel` BIGINT(11) NOT NULL,
`first_name` VARCHAR(45) NOT NULL,
`last_name` VARCHAR(45) NOT NULL,
`sex_id` ENUM('M', 'F') NOT NULL,
`trainer_login` VARCHAR(20) NULL,
PRIMARY KEY (`pesel`),
CONSTRAINT `fk_athletes_trainers`
FOREIGN KEY (`trainer_login`)
REFERENCES `la`.`trainers` (`login`)
ON DELETE SET NULL -- W przypadku usunięcia przez trenera konta, wszytkim zawodnikom
-- tego trenera zostanie ustawiony trener_login = NULL
ON UPDATE RESTRICT, -- Nie można uaktualniać loginu trenera, jeśli jakikolwiek zawodnik jest z nim związany
CONSTRAINT `fk_athletes_sexes1`
FOREIGN KEY (`sex_id`)
REFERENCES `la`.`sexes` (`id`)
ON DELETE RESTRICT -- Nie można usunąć płci jeśli jakikolwiek zawodnik ją posiada
ON UPDATE RESTRICT)-- Nie można uaktualniać płci jeśli jakikolwiek zawodnik ją posiada
ENGINE = InnoDB;