Ich möchte einen Trigger erstellen, der einige Daten validiert, bevor Zeilen in die Tabelle eingefügt werden. Ich habe drei Tische:
Tischpersonal:
CREATE TABLE IF NOT EXISTS `mydb`.`Personal` ( `IdPersonal` INT NOT NULL, `ApePaterno` VARCHAR(60) NOT NULL, `ApeMaterno` VARCHAR(60) NULL, `Nombre` VARCHAR(60) NOT NULL, `Direccion` VARCHAR(100) NOT NULL, `FechaDeIngreso` DATE NOT NULL, PRIMARY KEY (`IdPersonal`))
Tabellenbenutzer:
CREATE TABLE IF NOT EXISTS `mydb`.`Usuarios` ( `idUsuario` INT NOT NULL, `Nombre` VARCHAR(45) NOT NULL, `Contrasenia` VARCHAR(45) NOT NULL, `IdPersonal` INT NULL, PRIMARY KEY (`idUsuario`), INDEX `fk_Usuario_Personal_idx` (`IdPersonal` ASC) VISIBLE, CONSTRAINT `fk_Usuario_Personal` FOREIGN KEY (`IdPersonal`) REFERENCES `mydb`.`Personal` (`IdPersonal`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB
und Tabellenanmerkung:
CREATE TABLE IF NOT EXISTS `mydb`.`Notas` ( `idNota` INT NOT NULL, `Nota` VARCHAR(256) NOT NULL, `IdUsuario` INT NOT NULL, PRIMARY KEY (`idNota`), INDEX `fk_IdUsuario_idx` (`IdUsuario` ASC) VISIBLE, CONSTRAINT `fk_IdUsuario` FOREIGN KEY (`IdUsuario`) REFERENCES `mydb`.`Usuarios` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB
Damit nur Benutzer, die zu Personen gehören, Kommentare einfügen können, habe ich versucht, den nächsten Auslöser zu implementieren:
CREATE DEFINER=`root`@`localhost` TRIGGER `Notas_BEFORE_INSERT` BEFORE INSERT ON `Notas` FOR EACH ROW BEGIN DECLARE IdInterno INT; SELECT IdPersonal INTO IdInterno FROM Usuarios WHERE idUsuario = new.IdUsuario; IF (IdInterno != null) THEN INSERT INTO Notas (Nota, IdUsuario) VALUES (new.Nota, new.IdUsuario); ELSE SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Las notas sólo pueden ser registradas por usuarios internos'; END IF; END
Die Idee ist, die Peronnel-ID aus der Benutzertabelle abzurufen und, wenn sie leer ist, nichts in die Tabelle einzufügen, aber ich kann es nicht zum Laufen bringen
您已经处于在 Notas 上插入的触发器中,因此如果没有理由取消它,就让它通过。
在将某些内容与 NULL 进行比较时,还可以使用
IS NULL
或IS NOT NULL
。不要使用=
或!=
,因为 NULL 不是等于或不等于任何值的值。 IE。NULL = NULL
不正确。