Mysql 的触发器问题
时间:2011-11-29
来源:互联网
DELIMITER $$
CREATE TRIGGER Up_Credit AFTER INSERT ON sc
FOR EACH ROW
BEGIN
IF (NEW.Grade>60)
IF (SELECT sno FROM credits WHERE credits.sno=NEW.sno) IS NULL
INSERT INTO credits VALUES (NEW.sno,0,1)
ELSE
UPDATE credits SET Nopass = Nopass+1 WHERE ( credits.sno=NEW.sno )
ELSE
IF (SELECT sno FROM credits WHERE credits.sno=NEW.SNO) IS NULL
INSERT INTO credits VALUES (NEW.sno,(SELECT Credit FROM courses WHERE courses.cno=NEW.cno),0)
ELSE
UPDATE credits SET SumCredit= sumCredit+(SELECT Cerdit FROM courses WHERE courses.cno=NEW.cno)
END IF
END $$
各位大神 我上面那段代码哪里错了啊 调试了一个晚上 查了手册 都没发现哪里错了 跪求各位大神给点力支持下
下面是建表文件 那些表是没错误的 就是上面那段代码错了
CREATE TABLE `courses` (
`CNO` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '',
`CNAME` varchar(225) CHARACTER SET utf8 DEFAULT NULL,
`LHOUR` int(11) DEFAULT NULL,
`CREDIT` int(11) DEFAULT NULL,
`SEMESTER` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
CREATE TABLE `credits` (
`sno` varchar(10) NOT NULL,
`SumCredit` int(11) DEFAULT NULL,
`NoPass` int(11) DEFAULT NULL,
PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `sc` (
`SNO` varchar(10) NOT NULL DEFAULT '',
`CNO` varchar(10) NOT NULL DEFAULT '',
`GRADE` double NOT NULL,
PRIMARY KEY (`SNO`,`CNO`),
KEY `CNO` (`CNO`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`SNO`) REFERENCES `students` (`SNO`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`CNO`) REFERENCES `courses` (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `students` (
`SNO` varchar(10) NOT NULL DEFAULT '',
`SNAME` varchar(50) DEFAULT NULL,
`SEX` varchar(1) DEFAULT NULL,
`BDATE` date DEFAULT NULL,
`HEIGHT` double DEFAULT NULL,
`DEPARTMENT` varchar(50) DEFAULT NULL,
PRIMARY KEY (`SNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER Up_Credit AFTER INSERT ON sc
FOR EACH ROW
BEGIN
IF (NEW.Grade>60)
IF (SELECT sno FROM credits WHERE credits.sno=NEW.sno) IS NULL
INSERT INTO credits VALUES (NEW.sno,0,1)
ELSE
UPDATE credits SET Nopass = Nopass+1 WHERE ( credits.sno=NEW.sno )
ELSE
IF (SELECT sno FROM credits WHERE credits.sno=NEW.SNO) IS NULL
INSERT INTO credits VALUES (NEW.sno,(SELECT Credit FROM courses WHERE courses.cno=NEW.cno),0)
ELSE
UPDATE credits SET SumCredit= sumCredit+(SELECT Cerdit FROM courses WHERE courses.cno=NEW.cno)
END IF
END $$
各位大神 我上面那段代码哪里错了啊 调试了一个晚上 查了手册 都没发现哪里错了 跪求各位大神给点力支持下
下面是建表文件 那些表是没错误的 就是上面那段代码错了
CREATE TABLE `courses` (
`CNO` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '',
`CNAME` varchar(225) CHARACTER SET utf8 DEFAULT NULL,
`LHOUR` int(11) DEFAULT NULL,
`CREDIT` int(11) DEFAULT NULL,
`SEMESTER` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
CREATE TABLE `credits` (
`sno` varchar(10) NOT NULL,
`SumCredit` int(11) DEFAULT NULL,
`NoPass` int(11) DEFAULT NULL,
PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `sc` (
`SNO` varchar(10) NOT NULL DEFAULT '',
`CNO` varchar(10) NOT NULL DEFAULT '',
`GRADE` double NOT NULL,
PRIMARY KEY (`SNO`,`CNO`),
KEY `CNO` (`CNO`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`SNO`) REFERENCES `students` (`SNO`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`CNO`) REFERENCES `courses` (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `students` (
`SNO` varchar(10) NOT NULL DEFAULT '',
`SNAME` varchar(50) DEFAULT NULL,
`SEX` varchar(1) DEFAULT NULL,
`BDATE` date DEFAULT NULL,
`HEIGHT` double DEFAULT NULL,
`DEPARTMENT` varchar(50) DEFAULT NULL,
PRIMARY KEY (`SNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
作者: heartlc 发布时间: 2011-11-29
错误太多,建议还是先看一下手册中的语法介绍。
SQL code
SQL code
DELIMITER $$ CREATE TRIGGER Up_Credit AFTER INSERT ON sc FOR EACH ROW BEGIN declare bExist int default 0; IF (NEW.Grade>60) then SELECT count(*) into bExist FROM credits WHERE credits.sno=NEW.sno; IF bExist>0 THEN INSERT INTO credits VALUES (NEW.sno,0,1); ELSE UPDATE credits SET Nopass = Nopass+1 WHERE ( credits.sno=NEW.sno ); end if; ELSE SELECT count(*) into bExist FROM credits WHERE credits.sno=NEW.sno; IF bExist>0 THEN INSERT INTO credits VALUES (NEW.sno,(SELECT Credit FROM courses WHERE courses.cno=NEW.cno),0); ELSE UPDATE credits SET SumCredit= sumCredit+(SELECT Cerdit FROM courses WHERE courses.cno=NEW.cno); end if; END IF; END $$
作者: ACMAIN_CHM 发布时间: 2011-11-29
DELIMITER $$
CREATE TRIGGER Up_Credit AFTER INSERT ON sc
FOR EACH ROW
BEGIN
IF (NEW.Grade>60) THEN
SELECT sno INTO @sno FROM credits WHERE credits.sno=NEW.sno;
IF @sno IS NULL THEN
INSERT INTO credits VALUES (NEW.sno,0,1);
INSERT INTO credits VALUES (NEW.sno,(SELECT Credit FROM courses WHERE courses.cno=NEW.cno),0);
ELSE
UPDATE credits SET Nopass = Nopass+1 WHERE ( credits.sno=NEW.sno );
UPDATE credits SET SumCredit= sumCredit+(SELECT Cerdit FROM courses WHERE courses.cno=NEW.cno);
END IF;
END IF;
END $$
CREATE TRIGGER Up_Credit AFTER INSERT ON sc
FOR EACH ROW
BEGIN
IF (NEW.Grade>60) THEN
SELECT sno INTO @sno FROM credits WHERE credits.sno=NEW.sno;
IF @sno IS NULL THEN
INSERT INTO credits VALUES (NEW.sno,0,1);
INSERT INTO credits VALUES (NEW.sno,(SELECT Credit FROM courses WHERE courses.cno=NEW.cno),0);
ELSE
UPDATE credits SET Nopass = Nopass+1 WHERE ( credits.sno=NEW.sno );
UPDATE credits SET SumCredit= sumCredit+(SELECT Cerdit FROM courses WHERE courses.cno=NEW.cno);
END IF;
END IF;
END $$
作者: wwwwb 发布时间: 2011-11-29
你这是sqlserver得语法吧
作者: rucypli 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28