4 OLD 与 NEW 关键字
在 triggers 元件中,可以使用一般的 SQL 叙述完成需要执行的工作,也可以使用在 stored routines 中讨论过的变量与流程控制,让 triggers 元件可以处理比较复杂的需求。MySQL 数据库在 triggers 元件中额外提供“OLD”与“NEW”两个关键字:
因为“OLD”与“NEW”两个关键字的特性,所以它们可以使用的 triggers 种类会有一些限制:
Trigger 种类 | OLD | NEW |
---|---|---|
INSERT | 不能使用 | 新增的字段资料 |
UPDATE | 修改前的字段资料 | 修改后的字段资料 |
DELETE | 删除前的字段资料 | 不能使用 |
以“cmdev.emp”表格的“UPDATE TRIGGER”来说,下列是使用“OLD”与“NEW”关键字取得的字段值:
延续上列为更新“cmdev.emp”表格执行纪录工作的 trigger 来说,如果想要让纪录的讯息更加详细,包含修改前与修改后的部门编号:
要完成上列的需求,就必须使用“OLD”与“NEW”关键字取得的字段值:
为表格建立“UPDATE TRIGGER”以后,就表示执行这个表格的修改动作,都会执行这个 trigger 元件:
如果要将“emp_before_update”的需求,修改为“只有在修改员工的部门编号时,才需要新增修改纪录”,你就可以使用在 sotred routines 讨论过的“IF”指令来完成这个需求:
在“INSERT TRIGGER”中使用“NEW”关键字时,要特别注意“AUTO_INCREMENT”字段型态:
如果有需要的话,你也可以使用“SET”叙述设定“NEW”关键字指定的字段值。以下列的情况来说:
要解决上列的问题,你可以要求在新增资料的时候,不要使用小写的文字。不过使用下列的“BEFORE INSERT TRIGGER”来处理的话,会更方便一些:
建立好这个“BEFORE INSERT TRIGGER”以后,就算新增的员工资料包含小写的名称与职务,这个 trigger 元件都会在新增纪录之前,把它们转换为大写:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论