WEB开发网
开发学院数据库MySQL MySQL 5.0-触发器(参考) 阅读

MySQL 5.0-触发器(参考)

 2007-02-13 10:52:08 来源:WEB开发网   
核心提示: Example of a "check" constraint"check"完整性约束例子What's a "check" constraint 什么是"check"约束在标准的SQL语言中,我们可以在

Example of a "check" constraint

"check"完整性约束例子

What's a "check" constraint 什么是"check"约束

在标准的SQL语言中,我们可以在(CREATE TABLE)创建表的过程中使用"CHECK (condition)",

例如:

CREATE TABLE t25
(s1 INT, s2 CHAR(5), PRIMARY KEY (s1),
CHECK (LEFT(s2,1)='A'))
ENGINE=INNODB;

这里CHECK的意思是"当s2列的最左边的字符不是'A'时,insert和update语句都会非法",MySQL的视图不支持CHECK,我个人是很希望它能支持的。但如果你很需要在表中使用这样的功能,我建议大家使用触发器来实现。

CREATE TABLE t25
(s1 INT, s2 CHAR(5),
PRIMARY KEY (s1))
ENGINE=INNODB//
CREATE TRIGGER t25_bi
BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//
CREATE TRIGGER t25_bu
BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//

我只需要使用BEFORE INSERT和BEFORE UPDATE语句就行了,删除了触发器不会对表有影响,同时AFTER的触发器也不能修改NEW的过程变量(transition variables)。为了激活触发器,我执行了向表中的行插入s1=0的数据,之后只要执行符合LEFT(s2,1) <> 'A'条件的动作都会失败:

INSERT INTO t25 VALUES (0,'a') /* priming the pump */ //

INSERT INTO t25 VALUES (5,'b') /* gets error '23000' */ //

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

Tags:MySQL 触发器 参考

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