update A set x = '0' where [condition];
如果未满足where-condition,则不进行更新。
取决于此我想在另一个表中触发插入,但仅在更新完成时 - 即ROW_COUNT()> 0
如何在一个请求中执行此操作?
我试过了:
update A set x = '0' where [condition];
if row_count() > 0 then
insert into [...];
end if;
这会导致错误。
PS:
问题纯粹是在一个db-request中执行更新和条件插入的可能性。通过使用预准备语句确保SQL-Injection-safty。
答案 0 :(得分:4)
创建一个存储过程,如:
DELIMITER $$
CREATE PROCEDURE updateA (c1 varchar)
BEGIN
declare rows_affected integer;
UPDATE a SET x = '0' WHERE col1 = c1;
SELECT row_count() INTO rows_affected;
IF rows_affected > 0 THEN BEGIN
INSERT INTO .....
END; END IF;
END $$
DELIMITER ;
或使用AFTER UPDATE触发器
DELIMITER $$
CREATE TRIGGER au_a_each AFTER UPDATE ON a FOR EACH ROW
BEGIN
INSERT INTO b (x,a_id) VALUES (new.x, new.id);
END $$
DELIMITER ;
答案 1 :(得分:0)
你可以做两个sql语句,只要你的条件是互斥的,即如果它“允许”更新,那么根据定义它将排除插入,反之亦然。
e.g。
UPDATE your_table set col1 = 'x'
where condition = <some condition here>
;
INSERT your_table (col1)
select x from some_other_table where condition = <some condition here>
;