mysql 条件触发器_具有条件的MySQL更新触发器(MySQL Update Trigger with Conditions)

一个PHP应用将'Pass', 'Fail'或'NA'插入到TEST1-TEST15字段。当有任何TEST字段含有'Fail'时,需要触发器自动将OVERALL字段更新为'FAIL'。在MySQL 5.1.63中,这可能涉及使用AFTER INSERT触发器和IF条件。问题得到解答,提供了创建触发器的示例代码。" 113459511,10551669,查询多门不及格科目学生的平均成绩,"['SQL', '数据库查询', '数据处理']
摘要由CSDN通过智能技术生成

具有条件的MySQL更新触发器(MySQL Update Trigger with Conditions)

我有一个PHP应用程序,通过TEST15将'Pass','Fail'或'NA'插入到字段TEST1,TEST2,TEST3 ......中。

我有一个名为OVERALL的字段,如果任何TEST1-TEST15字段包含'Fail',则需要使用'FAIL'自动更新。

我很确定我需要使用包含更新语句和CASE或IF的触发器,但我无法确定确切的语法。

任何人都可以帮助MySQL菜鸟吗? 我正在使用MySQL Server版本:5.1.63-0 + squeeze1(Debian)。

I have a PHP app that inserts 'Pass', 'Fail' or 'NA' into fields TEST1, TEST2, TEST3... through TEST15.

I have a field called OVERALL that needs to be automatically updated with 'FAIL' if any of the TEST1-TEST15 fields contains 'Fail'.

I'm pretty sure I need to use a trigger containing the update statement and either CASE or IF, but I haven't been able to nail down the exact syntax.

Can anyone please help a MySQL noob? I'm using MySQL Server version: 5.1.63-0+squeeze1 (Debian).

原文:https://stackoverflow.com/questions/12983557

2020-02-26 19:29

满意答案

你可能会做类似的事情

CREATE TRIGGER triggerName AFTER INSERT ON yourTable

FOR EACH ROW BEGIN

IF NEW.yourColumn = 'Fail' THEN

UPDATE otherField set column = 'Fail'

END IF;

END

这就是理论上这样一个触发器的样子,但是我必须说我不是100%的语法,因为我已经有一段时间了,因为我在mysql上工作了。

You could probably do something like

CREATE TRIGGER triggerName AFTER INSERT ON yourTable

FOR EACH ROW BEGIN

IF NEW.yourColumn = 'Fail' THEN

UPDATE otherField set column = 'Fail'

END IF;

END

This is what such a trigger could look like in theory, however I must say i'm not a 100% on the syntax since its been a while since i worked on mysql.

2012-10-19

相关问答

是的,错误意味着您无法修改gallery表,因为触发器是使用此表定义的。 有一种可能的方法来更新值,它是一个BEFORE UPDATE触发器,这里是一个例子 - CREATE TRIGGER updateRating

BEFORE UPDATE

ON gallery

FOR EACH ROW

BEGIN

SET NEW.rating= NEW.weight * NEW.modifier; -- You may update a NEW value.

END

最后,让我问一个问题。 为什么要使...

写一个更好的是,a)允许根据@marc_s更新多行,b)只更新它已经改变的地方,是: CREATE TRIGGER [UserSync]

ON [dbo].[Import]

FOR UPDATE

AS

BEGIN

UPDATE UserLogin

SET Password = i.password

from UserLogon u

inner join inserted i on i.Name = u.Name

inner join deleted d on d.Name = ...

触发器可以做很酷的事情,但有些事情你需要注意。 第一个也是最重要的:触发器对数据集进行操作,所以做一些像SET @customer_id = (SELECT customer_id FROM inserted); 几乎肯定注定要失败,因为inserted表可以容纳多行(除非你只是一次更新一个客户)。 知道这一点很容易重写触发器以便设置识别。 注意:也许不应该检索和计算账单号,而应该是账单表中的自动递增标识列? 我在代码中包含了一些注释,但它应该很容易遵循。 CREATE TRIGGER charg...

尝试这样的事情: CREATE TRIGGER Increment

AFTER UPDATE ON Subscription

FOR EACH ROW

BEGIN

IF NEW.State <> OLD.State AND NEW.STATE='C' THEN

UPDATE USER

SET num_sub=num_sub+1

WHERE USER.id = NEW.user_id; -- change this condition as ...

否则,如果应该是elseif(没有空格)如果OLD.type = profile看起来不正确,应该用单引号进行字符串比较。 Else if should be elseif (no space) IF OLD.type = profile doesn't look right should be in single quotes for a string comparison.

是的,如果事务被回滚,那么触发器完成的工作也将被回滚(除非你在触发器内做一些带有事务范围的monkeying以专门防止这种情况) Yes, if the transaction is rolled back, the work done by the trigger will also be rolled back (unless you do some monkeying with transaction scoping inside the trigger to specifically pr...

你可能会做类似的事情 CREATE TRIGGER triggerName AFTER INSERT ON yourTable

FOR EACH ROW BEGIN

IF NEW.yourColumn = 'Fail' THEN

UPDATE otherField set column = 'Fail'

END IF;

END

这就是理论上这样一个触发器的样子,但是我必须说我不是100%的语法,因为我已经有一段时间了,因为我在mysql上工作了。 您可以在触发器h...

执行指定操作的BEFORE UPDATE触发器将如下所示: DELIMITER $$

CREATE TRIGGER trg_comenzi_bu

BEFORE UPDATE ON comenzi

FOR EACH ROW

BEGIN

IF NEW.achitat = 1 THEN

SET NEW.dataachitat = DATE(NOW());

END IF;

END$$

DELIMITER ;

(这只是桌面检查;可能存在关键字顺序的问题; BEFORE UPDATE可能...

用NOT IN替换OR: CREATE OR REPLACE TRIGGER CHK_SALES_JOB

BEFORE INSERT OR UPDATE OF JOB_ID ON EMPLOYEES

FOR EACH ROW

BEGIN

IF :old.department_id = 80 AND :new.job_id NOT IN ('SA_REP', 'SA_MAN') THEN

RAISE_APPLICATION_ERROR(-20001, 'Sales Depart...

相关文章

public boolean update(User user) { User u = (User)

...

在WEB 应用开发中,调用session的update(),然后提交事物,之后,数据库中的数据成功更新

...

solr索引数据更新接口:http://localhost:8080/solr/update 有以下一

...

7月13日,11g release 2 的第二个补丁集更新发布了;9i的最终版本为9.2.0.8,10

...

通常文档只会有一部分要更新。利用原子的更新修改器,可以使得这种部分更新极为髙效。更新修改器是种特殊的键

...

因为从表单出来的对象都是瞬时对象,但是UPDATE的时候岂不是还要重新把持久对象LOAD出来再封装值?

...

我在一台服务器上有个仓库,并开启web server 我希望,在其他机器往这台服务器push内容后,

...

在BaseService类-java cms开发三我们抽取出了基本的业务逻辑常用的方法,但是对于ins

...

小弟最近做个练习 在表格分页的时候 有个很帅的分页工具栏 最右边是一个刷新的按钮 调了下 发现他是

...

利用PreparedStatement执行插入,更新的操作时候: 如: PreparedState

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值