我尝试了几个例子,无法实现我的目标 - 所以我在这里问......
我有一张桌子: 表格1 列:col1,col2
我想在插入后更改col2: 如果(col2 = 0)那么 将col2改为max(col2)+ 1 其他 保持价值不变 感谢
答案 0 :(得分:2)
您需要在插入之前使用,因为在插入之前,您可以检查col2
是否为0
,然后将值设置为max col2 + 1
这是一种方法
delimiter //
create trigger test_ins before insert on table1
for each row
begin
declare max_col2 int;
if new.col2 = 0 then
set max_col2 = (select max(col2) from table1);
end if ;
if max_col2 is null then
set new.col2 = 1 ;
else
set new.col2 = max_col2 + 1 ;
end if ;
end ;//
delimiter ;
请注意,在上面的触发器中,我添加了一个检查,如果max(col2)
为null,当您将表中的第一条记录添加到col2
为0时,我将其设置为1
if max_col2 is null then
set new.col2 = 1 ;
您可以根据需要进行设置。
这是一个测试用例
mysql> create table table1 (col1 int, col2 int);
Query OK, 0 rows affected (0.13 sec)
mysql> delimiter //
mysql> create trigger test_ins before insert on table1
-> for each row
-> begin
-> declare max_col2 int;
-> if new.col2 = 0 then
-> set max_col2 = (select max(col2) from table1);
-> end if ;
-> if max_col2 is null then
-> set new.col2 = 1 ;
-> else
-> set new.col2 = max_col2 + 1 ;
-> end if ;
-> end ;//
Query OK, 0 rows affected (0.10 sec)
mysql> delimiter ;
mysql> insert into table1 values (1,0);
Query OK, 1 row affected (0.04 sec)
mysql> select * from table1;
+------+------+
| col1 | col2 |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
mysql> insert into table1 values (2,0);
Query OK, 1 row affected (0.04 sec)
mysql> select * from table1;
+------+------+
| col1 | col2 |
+------+------+
| 1 | 1 |
| 2 | 2 |
+------+------+
2 rows in set (0.00 sec)
答案 1 :(得分:0)
再次 - 感谢您的回复。
然而,我测试了它,似乎:
我改变了你的代码并添加了一些额外的IF。 现在它工作正常(对我而言)。
DELIMITER // CREATE TRIGGER trigCF7Submits BEFORE INSERT ON wp_cf7dbplugin_submits FOR EACH ROW BEGIN DECLARE nMaxInternalNumber INT; IF ((new.form_name='ActionForm') AND (new.field_name='txtActionFormInternalNumber')) then IF (new.field_value = 0) THEN SET nMaxInternalNumber = (SELECT max(field_value) FROM wp_cf7dbplugin_submits WHERE ((form_name='ActionForm') AND (field_name='txtActionFormInternalNumber'))); IF (nMaxInternalNumber IS NULL) THEN SET nMaxInternalNumber = 0; END IF; SET nMaxInternalNumber = nMaxInternalNumber + 1; ELSE SET nMaxInternalNumber = new.field_value; END IF; SET new.field_value = nMaxInternalNumber ; END IF ; END ;// DELIMITER ;