WEB开发网
开发学院数据库MySQL MySQL 5.0新特性教程 触发器:第一讲 阅读

MySQL 5.0新特性教程 触发器:第一讲

 2005-10-31 16:44:44 来源:WEB开发网   
核心提示: Privileges权限你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,MySQL 5.0新特性教程 触发器:第一讲(5),那么就足够了,这跟SQL的标准有所不同,CREATE TRIGGER t21_auBEFORE UPDATE ON t22FOR EACH RO


Privileges权限

  你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER)。如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同,我也希望能尽快改成标准的。

  因此在下一个版本的MySQL(和PHP搭配之最佳组合)中,你完全有可能看到有一种叫做CREATE TRIGGER的新权限。然后通过这样的方法赋予:

GRANT CREATE TRIGGER ON <表名称> TO <用户或用户列表>;


  也可以通过这样收回权限:

REVOKE CREATE TRIGGER ON <表名称> FROM <用户或用户列表>;


Referring to OLD and NEW columns 关于旧的和新创建的列的标识

  在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识:

  "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。

  对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。下面是一个UPDATE中同时使用NEW和OLD的例子。

CREATE TRIGGER t21_au
BEFORE UPDATE ON t22
FOR EACH ROW
BEGIN
SET @old = OLD . s1;
SET @new = NEW.s1;
END;//


  现在如果t21表中的s1列的值是55,那么执行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成55,而@new的值将会变成56。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MySQL 特性 教程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接