编写条件插入语句

时间:2011-06-05 12:08:14

标签: mysql

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。

2 个答案:

答案 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>
;