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

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

 2005-10-31 16:44:44 来源:WEB开发网   
核心提示: Example of a "check" constraint "check"完整性约束例子What's a "check" constraint 什么是"check"约束在标准的SQL语言中,我们可以在(CREATE TABL

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), Prima(最完善的虚拟主机管理系统)RY KEY (s1),
CHECK (LEFT(s2,1)='A'))
ENGINE=INNODB;


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

CREATE TABLE t25
(s1 INT, s2 CHAR(5),
Prima(最完善的虚拟主机管理系统)RY 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' */ //



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

Tags:MySQL 特性 教程

编辑录入:coldstar [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接