SQLite触发器的SQL语法.pdf
SQLite 触发器的 SQL 语法 SQLite 触发器是数据库 schema 中的一种自动执行的数据库操作,发生在特定的数据库事件,如 DELETE、INSERT、UPDATE 时。触发器可以由在特殊表上执行的语句触发,或 UPDATE 表中特定的字段时触发。 CREATE TRIGGER 语句用于向数据库 schema 中添加触发器。语法如下: CREATE TRIGGER trigger-name [ BEFORE | AFTER ] database-event ON [ database-name . ] table-name trigger-action 其中,trigger-name 是触发器的名称,database-event 是触发器所响应的数据库事件,如 DELETE、INSERT、UPDATE 等。table-name 是触发器所关联的表名。trigger-action 是触发器所执行的操作。 在 SQLite 中,触发器可以分为两种:FOR EACH ROW 触发器和 FOR EACH STATEMENT 触发器。但是,SQLite 目前仅支持 FOR EACH ROW 触发器,不支持 FOR EACH STATEMENT 触发器。 FOR EACH ROW 触发器的意思是由 trigger-steps 说明的 SQL 语句可能在(由 WHEN 子句决定的)数据库插入、更改或删除的每一行触发 trigger。WHEN 子句和 trigger-steps 可以使用 "NEW.column-name" 和 "OLD.column-name" 的引用形式访问正在被插入、更改或删除的行的元素,column-name 是触发器关联的表中的字段名。 WHEN 子句决定了 trigger-steps 执行的条件,而 trigger-time 决定了 trigger-steps 执行的时间,它是相对于关联行的插入、删除和修改而言的。 在创建触发器时,可以使用 ON CONFLICT 子句来指定冲突处理方法。但是,如果触发 trigger 的语句使用了 ON CONFLICT 子句,则覆盖前述的 ON CONFLICT 子句所定义的冲突处理方法。 关联表被撤销时,触发器被自动删除。不仅在表上,在视图上一样可以创建触发器,在 CREATE TRIGGER 语句中使用 INSTEAD OF 即可。 视图关联的表不会被修改(除了由触发器进行的修改操作)。例如,假设 "customers" 表存储了客户信息,"orders" 表存储了订单信息,下面的触发器确保当用户改变地址时所有的关联订单地址均进行相应改变: CREATE TRIGGER update_customer_address UPDATE OF address ON customers BEGIN UPDATE orders SET address = new.address WHERE customer_name = old.name; END; 定义了该触发器后,执行如下语句: UPDATE customers SET address = ’1 Main St. ’ WHERE name = ’Jack Jones’; 将使下面的语句自动执行: UPDATE orders SET address = ’1 Main St. ’ WHERE customer_name = ’Jack Jones’; SQLite 触发器可以帮助开发者自动执行数据库操作,提高数据库的安全性和一致性。