插入后和更新后的 MySQL 触发器

标签 mysql sql triggers

我有两个表,其中一个名为 att 如下

CREATE TABLE att (
  SID varchar(50) NOT NULL, 
  CID varchar(50) NOT NULL, 
  Date date NOT NULL,
  H1 varchar(1) NOT NULL DEFAULT 0,
  H2 varchar(1) NOT NULL DEFAULT 0,
  H3 varchar(1) NOT NULL DEFAULT 0,
  H4 varchar(1) NOT NULL DEFAULT 0,
  H5 varchar(1) NOT NULL DEFAULT 0,
  H6 varchar(1) NOT NULL DEFAULT 0,
  H7 varchar(1) NOT NULL DEFAULT 0,
  H8 varchar(1) NOT NULL DEFAULT 0,
  H9 varchar(1) NOT NULL DEFAULT 0,
  H10 varchar(1) NOT NULL DEFAULT 0,
  INDEX (SID, CID)
);

另一个表是per,包含以下字段:
SID CID 每

如何为以下内容编写触发器:
如果 att 表上 h1-h0 的任何字段发生更新,则
使用以下值更新 per 表中的 per 列:
((1 的总数 - 0 的总数)/(1 的总数 + 0 的总数))/100

提前致谢
我开发了一个触发器,但它不起作用,它在第 11 行说错误,你能说出问题是什么吗??

create TRIGGER `att_up` AFTER UPDATE ON `attentance`
FOR EACH ROW BEGIN
  DECLARE Zeros INT;
  DECLARE Ones INT;
  DECLARE total INT;
  DECLARE atted FLOAT;
  SELECT SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8)) 
      INTO Zeros FROM attentance 
      WHERE StudID=NEW.StudID;
  SELECT SUM(h1+h2+h3+h4+h5+h6+h7+h8) 
      INTO Ones FROM attentance 
      WHERE StudID=NEW.StudID;
  SELECT SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8))+ SUM(h1+h2+h3+h4+h5+h6+h7+h8) 
      INTO total FROM attentance 
      WHERE StudID=NEW.StudID;
  set atted=((ZEROS-Ones)/total)/100;
  INSERT into per(per) values (atted);
END$$

最佳答案

确保在定义触发器之前更改分隔符。还要确保在创建表和触发器时使用相同的表名和列名(您使用的是 attattendance,以及 SIDStudID,在您的示例中)。

事实上,设置分隔符后,我在MySQL 5.1.55 中测试触发器定义没有导致错误。

delimiter $$
CREATE TRIGGER `att_up` 
  AFTER UPDATE ON `attendance`
FOR EACH ROW 
BEGIN
  DECLARE Zeros INT;
  DECLARE Ones INT;
  DECLARE total INT;
  DECLARE attend FLOAT;
  SELECT SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8)), 
         SUM(h1+h2+h3+h4+h5+h6+h7+h8),
         SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8)) + SUM(h1+h2+h3+h4+h5+h6+h7+h8)
    INTO Zeros, Ones, Total FROM attendance 
    WHERE SID=NEW.SID;
  SET attend=((Zeros-Ones)/total)/100;
  INSERT INTO per (SID, CID, per) values (NEW.SID, NEW.CID, attend)
    ON DUPLICATE KEY UPDATE per=attend;
END$$
delimiter ;

关于插入后和更新后的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201497/

相关文章:

php - 条件偏好 sql 的更好方法

java - 如何在android中检索包含特定单词的联系人姓名?

sql - 获取 sql 列使用的 XML 模式

sql - 带触发器的物化 View ?

testing - Apex 测试类 - 触发器未触发

wpf - 触发 Button.Click 时的 XAML Binding.UpdateSourceTrigger?

mysql:执行查询的序列

mysql - Where 子句不适用于条件

php - 如何排除最后3个id并从mysql php数据库中提取内容?

sql - Try Catch - 资源强度?