2016-08-13 57 views
-1

这是我在MySQL中的第一个过程,我试图从我的表中取出ID列,将它存储到一个变量中,然后向其中添加1,然后使用新值更新表。当我打电话给myFirstProcedure()时,它将所有的id值设置为6,而不是每个都增加1.如何正确地对其进行编码?分配和修改MySQL查询到变量

DELIMITER // 
CREATE PROCEDURE myFirstProcedure() 
BEGIN 
DECLARE IdValue INT DEFAULT 0; 
SELECT COUNT(*) INTO IdValue 
FROM new_table; 
UPDATE new_table 
SET ID = IdValue +1; 
END// 
DELIMITER ; 
+0

你想用这个存储过程做什么? – valgog

+0

请注意,您只有一个变量和许多行。你应该更好地定义你想要做的事情。你想更新所有行中的所有ID吗?你想在某些特定行中增加ID吗?你想为新行生成一个新的ID吗?你想重新编号所有行的所有ID吗? – valgog

+0

您只在商店中存储一个ID?然后你告诉你不要在所有行中更新ID。正如我所说的,你必须定义你想要做的事情,直到现在我听不到任何有意义的描述。你能否定义你想解决的问题? – valgog

回答

2

这是因为您将所有值设置为相同的值。您可以通过在存储过程中增加变量做到这一点:

DELIMITER // 

CREATE PROCEDURE myFirstProcedure() 
BEGIN 

    DECLARE v_maxid; 

    SELECT COUNT(*) INTO v_maxid 
    FROM new_table; 

    UPDATE new_table 
     SET ID = (v_maxid := v_maxid + 1); 
END// 
DELIMITER ; 

注意COUNT(*)将返回0如果表是空的,所以有NULL值没有问题。

+0

欣赏答案,似乎有语法错误。 – Rubiks