引发错误在 MySQL 触发器中不起作用

如何解决引发错误在 MySQL 触发器中不起作用

如果某人的姓氏不是全大写或者他们的名字的第一个字母不是大写,我会尝试在我的触发器中引发错误。但是,如果满足这些情况,我的代码似乎不会发出警报。有人可以向我解释我该怎么做吗?

这是我的桌子:

DROP TABLE IF EXISTS people;
CREATE TABLE IF NOT EXISTS people (
Id_People smallint(5) unsigned NOT NULL AUTO_INCREMENT,Firstname varchar(20) NOT NULL,Lastname varchar(20) NOT NULL,Birth     DATE,PRIMARY KEY (Id_People)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1002 ;DROP TRIGGER IF EXISTS insert_people;

这是我的触发器

DROP TRIGGER IF EXISTS insert_people;
DELIMITER $$
CREATE TRIGGER insert_people BEFORE INSERT ON people
FOR EACH ROW BEGIN 
    IF NOT  (NEW.Lastname like UCASE ) THEN 
          SIGNAL sqlSTATE '45000'
            SET MESSAGE_TEXT = 'the lastname must be in full caps ';
           
    ELSE IF
         NOT (NEW.Firstname like ucfirst ) THEN
           SIGNAL sqlSTATE '45000'
            SET MESSAGE_TEXT = 'the first letter of the firstname must be in caps'; 
    
     END IF; 
  END IF;
 
END$$

解决方法

您用来查找那些代码的代码不正确。

请将 DELIMITER 添加到触发代码中,因为它在示例站点中不是必需的

DROP TABLE IF EXISTS people;
CREATE TABLE IF NOT EXISTS people (
Id_People smallint(5) unsigned NOT NULL AUTO_INCREMENT,Firstname varchar(20) NOT NULL,Lastname varchar(20) NOT NULL,Birth     DATE,PRIMARY KEY (Id_People)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1002 ;DROP TRIGGER IF EXISTS insert_people;
CREATE TRIGGER insert_people BEFORE INSERT ON people
FOR EACH ROW BEGIN 
    IF NOT  (NEW.Lastname=BINARY UPPER(NEW.Lastname)) THEN 
          SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'the lastname must be in full caps ';
           
    ELSE IF
         NOT (ASCII(NEW.Firstname) BETWEEN 65 AND 90 ) THEN
           SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'the first letter of the firstname must be in caps'; 
    
     END IF; 
  END IF;
 
END
INSERT INTO people VALUES (NULL,'Hallo','Kitty','1980-01-01')
the lastname must be in full caps 
INSERT INTO people VALUES (NULL,'hallo','KITTY','1980-01-01')
the first letter of the firstname must be in caps

dbfiddle here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?