首页 > 解决方案 > 尽管语法应该是正确的,但为什么这些触发器没有检测到错误的数据?

问题描述

我想在我的 mysql 数据库中添加两个触发器,但似乎两个触发器都不起作用(尽管 mysql 编译器接受语法)。当我插入应该被触发器检测为错误的新数据行时,我没有收到错误消息。你知道错误可能是什么吗?

下面是触发器的代码:


USE `mydb`$$
DROP TRIGGER IF EXISTS `mydb`.`Teilnehmer_BEFORE_INSERT` $$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Teilnehmer_BEFORE_INSERT` BEFORE INSERT ON `Teilnehmer` FOR EACH ROW
BEGIN
    IF (DATEDIFF(CURRENT_DATE(),NEW.Geburtsdatum) < 6570) THEN

        -- Throw Exception
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Age is less than 18 years!';
        END IF;  -- A semicolon (delimiter) is missing here
END
$$

DELIMITER ;

DELIMITER $$
CREATE TRIGGER `enforce_phone_check` BEFORE INSERT ON `Teilnehmer` FOR EACH ROW 
BEGIN
   IF (NEW.Telefonnummer REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$' ) = 0 THEN
   SIGNAL SQLSTATE '33455'
   SET MESSAGE_TEXT = 'Your Phone Number is incorrect';
   END IF;
END$$
DELIMITER ;

以下是表定义:


CREATE TABLE IF NOT EXISTS `mydb`.`Preis` (
  `idPreis` INT NOT NULL,
  `Menge` VARCHAR(45) NULL,
  `Wert` INT NULL,
  `Art` VARCHAR(45) NULL,
  PRIMARY KEY (`idPreis`))
ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS `mydb`.`Teilnehmer` (
  `idTeilnehmer` INT NOT NULL,
  `email` VARCHAR(45) NULL,
  `Preis_idPreis` INT NOT NULL,
  `Vorname` VARCHAR(45) NULL,
  `Nachname` VARCHAR(45) NULL,
  `Strasse` VARCHAR(45) NULL,
  `Hausnr.` VARCHAR(45) NULL,
  `PLZ` INT(4) NULL,
  `Ort` VARCHAR(64) NULL,
  `Geburtsdatum` DATE NULL,
  `Telefonnummer` VARCHAR(16) NULL,
  `Bild_URL TEXT` TEXT(500) NULL,
  `ts` timestamp,
  PRIMARY KEY (`idTeilnehmer`, `Preis_idPreis`),
  INDEX `fk_Teilnehmer_Preis1_idx` (`Preis_idPreis` ASC)   VISIBLE,
  CONSTRAINT `fk_Teilnehmer_Preis1`
    FOREIGN KEY (`Preis_idPreis`)
    REFERENCES `mydb`.`Preis` (`idPreis`),
  UNIQUE Key `idTeilnehmer`(`idTeilnehmer`, `Nachname`))
ENGINE = InnoDB;



这是一个应该为两个触发器引发错误的表条目(但不会):


INSERT INTO `mydb`.`teilnehmer` (`idTeilnehmer`, `email`, `Preis_idPreis`, `Vorname`, `Nachname`, `Strasse`, `Hausnr.`, `PLZ`, `Ort`, `Geburtsdatum`, `Telefonnummer`, `Bild_URL TEXT`, `ts`) VALUES ('1', 'sdfsdf', '1', 'sdfsd', 'sdfsd', 'sdfsdf', '17', '9230', 'Flawil', '2005-06-06', '2342345', 'stsdfsdf', '2019-06-06');

标签: mysqlmysql-workbenchmysql-error-1064

解决方案


推荐阅读