MySQL 插入后和更新后触发

2023-12-07

我有两张表,其中一张名为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 每

如何为以下内容编写触发器:
如果 h1-h0 中的任何字段发生更新att然后表
更新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$$

确保在定义触发器之前更改分隔符。还要确保在创建表和触发器时使用相同的表名和列名(您正在使用att and attendance, and SID and StudID,在你的例子中)。

事实上,在设置分隔符后,我在 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 ;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 插入后和更新后触发 的相关文章

  • 使用存储过程并发访问MySQL数据库

    我有一个存储过程 它将读取然后增加数据库中的值 许多程序同时使用这个特定的过程 我担心并发问题 特别是读写器问题 有人可以建议我任何可能的解决方案吗 thanks 首先 正如另一篇文章中所述 使用 InnoDB 从 MySQL 5 5 开始
  • PHP 和 MySQLi 中没有选择数据库错误[重复]

    这个问题在这里已经有答案了 我必须从 MySQL 数据库中选择数据 我一直在寻找答案 但仍然没有找到 我正在学习W3School http www w3schools com php php mysql select asp 我的 MySQ
  • 创建触发器

    如何启动触发器 以便在未付余额超过 50 美元的情况下无人能够租借电影 这里有一个跨行表约束 即你不能只放置一个 OracleCONSTRAINT在列上 因为它们一次只能查看一行中的数据 Oracle 仅支持两种跨 行约束类型 唯一性 例如
  • MySql 完全联接(联合)和多个日期列的排序

    一个相当复杂的 sql 查询 我可能使它变得更加困难 我有两张桌子 消息 newsid 日期时间 新闻文本 图片 图片ID 日期时间 imgPath 两者没有关系 我只是在新闻 图片创建的日期之前加入 到目前为止的 SQL SELECT F
  • 在带有 OR 条件的 LEFT JOIN 中使用索引

    考虑以下查询 SELECT FROM table1 LEFT JOIN table2 ON table2 some primary key table1 some primary key LEFT JOIN table3 ON table3
  • 用于分页的php示例脚本[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以建议一个好的分页 php 脚本 其中人们想要分页显示数据库中的大量项目 以下链接可以帮助您
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • MySQL - 此版本的 MySQL 尚不支持“LIMIT 和 IN/ALL/ANY/SOME 子查询”

    这是php编码我正在使用的 Last Video db gt fetch all SELECT VID thumb FROM video WHERE VID IN SELECT VID FROM video WHERE title LIKE
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • PHP/MySQL:检索邻接列表模型中的单个路径

    有没有什么有效的方法可以在不限制深度的情况下根据节点的ID检索邻接列表模型中的单个路径 就像如果我有一个名为 Banana 的节点的 ID 我可以获得以下路径 Food gt Fruits gt Banana 如果不可能的话也不是什么大问题
  • 数据太长,导致列错误(包含国家字符)

    我必须移植一些DBS变成独立的MySQL版本 5 0 18运行于Windows 7 64 位我遇到了一个困扰我的问题 如果我尝试将任何国家 Unicode 字符插入varchar我收到错误 ERROR 1406 22001 Data too
  • 如何将 MySql 表导出/转储到文本文件中,包括字段名称(也称为标题或列名称)

    在 MySql 的解释器中 很容易将表及其字段名称转储到屏幕上 似乎没有简单的方法可以将表导出到制表符分隔或 CSV 输出文件包括它的列标题 我尝试仅使用 SQL 或 Linux 命令行来完成此操作 而不用其他语言编写程序 谢谢 将查询通过
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?

    我有带有 DATETIME 列时间戳的数据 我想将其过滤到 DATETIME 介于上午 9 30 到下午 5 30 之间的任意一天的记录集 最好的方法是什么 更新 更改是因为我需要精确到分钟 而不仅仅是小时 对于那个很抱歉 您始终可以将其编
  • 在带有循环引用的表中插入 SQL

    我有 2 张桌子 Empleados numEmpl nombre apellido sexo telefono salario numDept Departamentos numDept nombreDept numDirect 在部门中
  • 无效的 PDO 查询不会返回错误

    下面的第二条 SQL 语句在 phpMyAdmin 中返回错误 SET num 2000040 INSERT INTO artikel artikel nr lieferant nr bezeichnung 1 bezeichnung 1
  • 如何将另一列的整数值添加到日期列?

    我试图将整数添加到日期 但出现以下错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 6 行的 wp OrderDate INTERVAL WPProduct Duration DAY AS
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from

随机推荐

  • 在多个数据库上安装存储过程

    有什么方法可以轻松地在多个 MySQL 数据库上同时创建存储过程吗 所有数据库都安装在同一个 MySQL 上 在所有模式中安装 要获取模式列表 请使用show databases 将此与 use use schemaA use schema
  • 始终在 console.log 中显示 html 元素 (Chromium)

    我有一个 js 脚本console log有时会打印 html 元素 Chrome 有两种打印此类 DOM 元素的模式 在 html 样式中 例如 div class abc div 其中悬停会突出显示页面中的元素 然后单击会打开 DOM
  • iPhone 5 + iOS6 如何决定应用程序是否必须在信箱模式下运行

    iOS6 如何决定应用程序是否必须在 iPhone 5 上以信箱 兼容模式运行 这是构建设置参数 如 目标设备系列 吗 或者所有基于最新 SDK 构建的应用程序都必须支持 iPhone 5 屏幕尺寸 或者应用程序将以信箱模式运行 是否没有
  • 如何在 makefile 中使用 LDFLAGS

    我是 Linux 操作系统的新手 我正在尝试编译一个 c使用 makefile 文件 必须链接数学库 我的 makefile 如下所示 CC gcc CFLAGS Wall lm all client PHONY clean clean r
  • 如何连接两个不同形状的张量

    我有两个张量 get shape 400 和 1176 我想将它们连接成一个大小为 1576 的张量 我尝试了 concat 但它要求两者具有相同的维度 怎么办呢 希望您通过批量大小传递相同维度的输入 import tensorflow a
  • 指针前一变量

    据我所知 在 C 中检查指针是否是数组末尾的一个元素是完全合法的 如下所示 char arr 16 for char ptr arr ptr arr sizeof arr sizeof arr 0 ptr some code 我的问题是这样
  • MSbuild 任务失败,因为“任何 CPU”解决方案的构建顺序不正确

    我在 Teambuild 中构建两种解决方案 一种是应用程序本身 另一种是 WiX 安装程序 我想使用 任何 CPU 构建配置来构建应用程序 并使用 x86 来构建安装程序 我在项目文件中首先列出了 任何 CPU 解决方案 但 Teambu
  • pandas 按两列值过滤行,不区分大小写

    我有一个简单的数据框 如下所示 Last Known Date ConfigredValue ReferenceValue 0 24 Jun 17 False FALSE 1 25 Jun 17 FALSE FALSE 2 26 Jun 1
  • 正则表达式 WORD 的最后一个字符

    我正在尝试匹配单词中的最后一个字符 WORD 是非空白字符的序列 n r t f 或匹配 的空行 我为此所做的表达是 n t r f n t r f 正则表达式匹配空白字符或行尾后面的非空白字符 但我不知道如何阻止它从结果中排除以下空白字符
  • Swift 计算属性不能在 init 中使用?

    我正在尝试将 MultipeerConnectivity 框架与 Swift 一起使用 我有以下属性 var peerId MCPeerID let advertiser MCNearbyServiceAdvertiser let brow
  • 混合服务器端 java 和客户端 javascript 图表库?

    是否有一个库可以用 Java 和 Javascript 为相同的数据生成相同的图表 我的任务是 显示一些华丽的动态图表在浏览器中 更好地使用动态工具提示 缩放等 我在这里考虑Javascript 并在服务器端用 Java 生成相同 或足够相
  • 为什么 (Excel VBA) 组合框更改事件每次引用其属性之一时都会触发?

    我是这个论坛的第一次用户 这是我的场景 在用户表单上 我有一个组合框 两个文本框和一个 确定 按钮 当用户从组合框的下拉列表中进行选择时 组合框的更改事件将被触发 事件处理代码将根据用户的选择使用工作表中的信息填充文本框 然后 用户可以编辑
  • 从字符串中获取价格值

    我有一个字符串 其中价格值 544 50 可以位于字符串中的任何位置 例如 HP G60 630US 笔记本电脑 笔记本电脑 RadioShack com gt 259 97 radioshack com 我需要从字符串中获取值 259 9
  • 类型错误:“dict_keys”对象不支持索引

    def shuffle self x random None int int x random random random gt shuffle list x in place return None Optional arg random
  • 使用 PHPMailer 和 GMAIL SMTP 发送电子邮件

    我已经阅读了网络上的每个示例 但似乎仍然无法连接到 GMAIL SMTP 这是我正在运行的代码 include phpMailer class phpmailer php path to the PHPMailer class mail n
  • 多个枚举的国际化(枚举值的翻译)[重复]

    这个问题在这里已经有答案了 再次讨论过的事情before我想分享 我的 解决方案并寻求增强功能 其他方法或最佳实践 我有几个需要国际化的枚举 我需要将枚举值翻译成某些语言以便在 jsf 页面中显示它们 示例枚举 public enum Tr
  • java.io.IOException:收到的身份验证质询为空

    我需要获取响应代码 但它抛出 IOException 我不知道怎么了 try url new URL urlBuilder toString conn HttpURLConnection url openConnection conn se
  • 如何将 UCS2 字符串转换为 UTF8?

    如何将 UCS2 每个字符 2 个字节 的字符串转换为 Ruby 中的 UTF8 字符串 你应该调查一下iconv 它是 Ruby 标准库的一部分 它是为这项任务而设计的 具体来说 Iconv iconv utf 8 utf 16 str
  • 如何在子窗口出现时通过单击父窗口上的按钮来禁用父窗口

    我在jsp中设计了一个窗口 其中有一个搜索按钮 当用户单击 搜索 按钮时 会出现新窗口 但此时我希望我的父窗口被禁用 这样当用户尝试在父窗口上执行任何操作时 在 搜索 表单关闭之前 它不应该允许 如果有人知道如何执行此操作 请告诉我 我已经
  • MySQL 插入后和更新后触发

    我有两张表 其中一张名为att如下 CREATE TABLE att SID varchar 50 NOT NULL CID varchar 50 NOT NULL Date date NOT NULL H1 varchar 1 NOT N