我有一个MySQL数据库,其中默认创建了以下行(例如)(id、任务和事例可能不同,但当前值始终为1)
idtaskcase用户。。。。。。。。。。。。最新日期
238……31001……..0…………..null……..1
239……41001……..0…………..空………..1
我必须用insert语句随机创建这样的行(新行)。正如您所看到的,日期已填写,当前等于0
idtaskcase用户。。。。。。。。。。。。最新日期
240……51001……12015.04.03……..0
241……21002……12015.04.03……..0
当我遇到默认创建的其中一行时,我想使用update而不是insert语句。
所以我在MySQL 中创建了以下过程
DELIMITER //
DROP PROCEDURE IF EXISTS FillProgress//
CREATE PROCEDURE FillProgress ( get_case INT(10),get_task INT(10), get_user INT(10) )
BEGIN
DECLARE test tinyint(1);
SET test = (SELECT COUNT(*) FROM progress WHERE case_id = get_case AND task_id = get_task);
IF test = 1 THEN
UPDATE progress SET current = 0, date = NOW(), user_id = get_user WHERE task_id = get_id AND case_id = get_case;
ELSE
INSERT INTO progress(task_id,case_id,user_id,date,current) VALUES (get_task,get_case,get_user,NOW(),0);
END IF;
END; //
DELIMITER ;
我使用count来查看是否已经有一行具有相同的案例和任务。如果它是真的(test=1),我使用UPDATE,否则使用INSERT。
如果我用数据库中已经写入的以下行进行测试
idtaskcase用户日期当前
241……41001……..0..空……….1
我使用CALL FillProgress(1001,4,1);
该行未更新,但我没有任何错误消息。
11:38:02 CALL FillProgress(1001,4,1) 0 row(s) affected 0.000 sec
如果我手动使用更新查询
UPDATE progress SET current = 0, date = NOW(), user_id = 1 WHERE task_id = 4 AND case_id = 1001;
它就像一个符咒。
插入查询也可以正常工作。
过程中的UPDATE查询有一个"WHERE task_id=get_id"子句,但我看不到在过程中定义了get_id;不过,存储过程有一个"gettask"参数。