2013-12-21 161 views
0

我有一个名为“Table1”的2列表: (名为“Col1”的列1的值为A,B,C,D,E,F) (列2命名为“Col2”,其值为12,15,2,5,200,1)。在创建触发器时触发现有表上的MySQL触发器

我想从列2中的所有值更改为值1,如果它们的值低于100,那么列2将最终看起来像这样: (列2名为“Col2”的值为: 1,1,1,1,200,1)。

我试图创建一个触发器:

delimiter // 

CREATE TRIGGER Table1upd BEFORE UPDATE ON Table1 
FOR EACH ROW 
BEGIN 
    IF NEW.Col2<100 THEN 
     SET NEW.Col2=1; 
    END IF; 
END;// 

delimiter ; 

当创建在MySQL工作台触发它说,添加了扳机但0行(S)的影响。

我假设我的问题是BEFORE UPDATE选项,因为触发器在我更新表中的某个值时工作,但我不知道该如何更改它,以便触发器最初也会自动执行我创造它。

预先感谢您的任何帮助, d

+1

受影响的0行是您在执行DDL查询时经常看到的内容。这并不意味着任何行都可能受到影响。这是MySQL通信方式的一个副作用,即使在没有行涉及的情况下也会返回行计数。 –

回答

0

答案很简单:一个BEFORE UPDATE触发器只触发对UPDATE,所以你需要一个触发BEFORE INSERT既包括用例:更新和插入:

delimiter // 

CREATE TRIGGER Table1insert BEFORE INSERT ON Table1 
FOR EACH ROW 
BEGIN 
    IF NEW.Col2<100 THEN 
     SET NEW.Col2=1; 
    END IF; 
END;// 

delimiter ; 
+0

对不起,但它不适合我。你能澄清一下吗?据我了解,它将在未来记录中添加到表格中,对吗?我已经在该表中有记录,并且不会因添加您建议的触发器而受到影响。我想让触发器改变现有的表记录。感谢名单。 – theexplorer

+0

@theexplorer澄清:一个'TRIGGER'只在事件上执行,即当一个新记录是INSERT'ed或现有记录通过'UPDATE'修改时。要修改您现有的记录(独立于任何事件),您需要手动执行查询,如下所示:'UPDATE Table1 SET Col2 = 1 WHERE Col2 <100' – Kaii