概览
触发器是一种机制,用于在点或边发生特定事件时自动执行预定义操作。触发器可以设置在事件发生的前或后运行,例如数据的插入、更新或删除。它们可以帮助你执行业务规则、维护数据完整性或执行辅助操作,无需人工干预,从而确保与DML操作相关的逻辑能够始终一致、自动地执行。
显示触发器
显示当前图的所有触发器:
SHOW TRIGGER
显示当前图的所有点触发器:
SHOW NODE TRIGGER
显示当前图的所有边触发器:
SHOW EDGE TRIGGER
每个触发器有如下信息:
字段 |
描述 |
---|---|
name |
触发器名称 |
schema |
触发器所应用的点或边Schema名称 |
description |
触发器描述 |
timing |
触发器什么时候起作用——在事件之前(before )或之后(after ) |
event |
触发器被激活的事件类型,包括insert (插入)、update (更新)和delete (删除) |
call |
触发器执行的操作或逻辑 |
创建触发器
为Student
点创建一个名为AutoUpperCase
的触发器,在插入前将name
属性转换为大写:
CREATE TRIGGER "AutoUpperCase" ON NODE "Student"
COMMENT "Converts name to uppercases before insertion"
BEFORE INSERT CALL "
$entity CALL {
LET entity.name = upper(entity.name)
}
"
该触发器会在插入Student
点之前,自动将其name
属性值转换为大写:
INSERT (n:Student {name: "John Doe"}) RETURN n.name
结果:
n.name |
---|
JOHN DOE |
为ENROLLED_IN
边创建一个名为AutoStatus
的触发器,在插入前自动将status
属性设置为“active”:
CREATE TRIGGER "AutoStaus" ON EDGE "ENROLLED_IN"
COMMENT "Sets status to true"
BEFORE INSERT CALL "
$entity CALL {
LET entity.status = 'active'
}
"
该触发器会在插入ENROLLED_IN
边之前,自动将其status
属性设置为“active”:
MATCH (s:Student {name: "JOHN DOE"}), (c:Course {name: "Science"})
INSERT (s)-[e:ENROLLED_IN]->(c)
RETURN e.status
结果:
e.status |
---|
active |
删除触发器
删除点触发器AutoUpperCase
:
DROP NODE TRIGGER AutoUpperCase
删除边触发器AutoStaus
:
DROP EDGE TRIGGER AutoStaus
注意:删除点或边Schema时,所有与该Schema相关的触发器也会被删除。