我有一个MySQL数据库,其中我默认创建了以下行(例如)(id,task和case可能不同,但当前值总是 1 )
....id task case user ............date current
238 ......3 1001 .....0 ..............null ..........1
239 ......4 1001 .....0 ..............null ..........1
我必须使用insert语句(新行)随机创建这样的行。如您所见,日期已填充且当前等于 0
....id task case user ............date current
240 ......5 1001 .....1 2015.04.03 ..........0
241 ......2 1002 .....1 2015.04.03 ..........0
当我遇到默认创建的一行时,我想使用更新而不是插入语句。
所以我在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来查看是否已经有一个具有相同case和task的行。如果是真的(test = 1)我使用 UPDATE ,否则使用 INSERT 。
如果我使用已在数据库中写入的以下行进行测试
....id task case user date current
241 ......4 1001 .....0 ..null ..........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;
它就像一个魅力。
插入查询也可以正常工作。
答案 0 :(得分:1)
过程中的UPDATE查询有一个“WHERE task_id = get_id”子句,但是我没有看到在过程中定义了get_id;但是,存储过程有一个“get_task”参数。