mysql - 如何创建MySQL触发器?

标签 mysql triggers

有人可以帮我使用 MySQL 触发器吗

假设我有两张表

Table_Current
No (INT TYPE)
Name (VARCHAR TYPE)
Value (DECIMAL TYPE)

Table_Record
No (INT TYPE)
Name (VARCHAR TYPE)
Value (DECIMAL TYPE)

所以我想要实现的是,我对Table.Current执行replace语句,如果'Value'字段的值小于Table.Record中的值,我想更新的值表.记录,

这是我的触发器

DELIMITER $$

CREATE TRIGGER Mytrigger
AFTER INSERT ON Table_Current

FOR EACH ROW
BEGIN

DECLARE CB DECIMAL (6,3);
DECLARE OB DECIMAL (6,3);

OB = SELECT Value FROM Table_Record WHERE Name=NEW.Name;
CB = NEW.Value;
IF CB<OB THEN
UPDATE Table_Record SET Value = NEW.Value WHERE Name = NEW.Name;
END IF;

END $$
DELIMITER;

最佳答案

你可以大大简化这个过程。您想要做的实际上是这个查询

    UPDATE Table_Record

    SET `Value` = NEW.`Value` 
    WHERE `Name` = NEW.`Name`
    AND `Value` < NEW.`Value`;

您有兴趣更新 Table_Record 中的行,其中 Name = NEW.Name。您只想在 NEW.Value 大于当前存储的值时进行更新。因此,如果不满足该值约束,则上述内容将不会更新。

此触发代码应该可以实现您想要实现的目标。

-- First of all, drop any other trigger with the same name
DROP TRIGGER IF EXISTS `Mytrigger`;

-- Create the new trigger
DELIMITER $$

CREATE TRIGGER `Mytrigger`
AFTER INSERT ON Table_Current

FOR EACH ROW
BEGIN

    UPDATE Table_Record

    SET `Value` = NEW.`Value` 
    WHERE `Name` = NEW.`Name`
    AND `Value` < NEW.`Value`;

END $$
DELIMITER;

关于mysql - 如何创建MySQL触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429647/

相关文章:

mysql - 无法使用 case 且存在于 sql 语句中

mysql - 通过返回 null 进行分组

mysql - 更新日期作为触发器的一部分?

android - MySQL 关系和实体

MySQL 触发器不能在 UPDATE 语句中使用同一个表

c# - 获取别名列总和的 SQL 子查询

MySQL - 1toN,从 table1 中选择具有 table2.attribute=1 和 table2.attribute=2 的项目

mysql - 使用 YEAR mysql 的年龄

MYSQL触发器错误1064

php - 如何创建 MySQL 触发器来跟踪更改