我有,我有以下行(由为例),默认情况下创建一个MySQL数据库(ID,任务和情况可能会有所不同,但目前的值总是)MySQL的程序出了错
....idtaskcaseuser............datecurrent
238......31001.....0..............null..........1
239......41001.....0..............null..........1
我必须用insert语句(新行)随机创建这样的行。正如你所看到的日期被填充和德电流等于
....idtaskcaseuser............datecurrent
240......51001.....12015.04.03..........0
241......21002.....12015.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 ;
我用数,看是否已经有相同的情况和任务的行。如果它是真的(test = 1),我使用UPDATE,否则使用INSERT。
如果我有以下行测试数据库中已经写
....idtaskcaseuserdatecurrent
241......41001.....0..null..........1
我用CALL FillProgress(1001,4,1);
钍e行未更新,但我没有任何错误消息。
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;
它的工作原理就像一个魅力。
插入查询也可以正常工作。