MySQL程序插入多行

时间:2014-07-20 15:07:51

标签: mysql sql insert procedure

我正在尝试在MySQL中编写一个过程来执行30(或更多)插入到表中。该表包含其他字段ID等,但IDauto_increment字段,其他字段不重要。

这是我到目前为止看other StackOverflow questions

的地方
DROP PROCEDURE IF EXISTS test;
DELIMITER #
CREATE PROCEDURE test()
BEGIN

DECLARE i INT UNSIGNED DEFAULT 1;

WHILE i < 30
    INSERT INTO account (login, password)
    SELECT concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9';

    SET i = i + 1;
END WHILE;
COMMIT; 
END #

DELIMITER;

CALL test();

但MySQL在第7行返回错误1064“语法错误,请查看您的手册”。第7行是以WHILE开头的那个。

我也试过这个INSERT声明:

INSERT INTO account (login, password)
VALUES (concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9');

但没有任何运气,MySQL会回复同样的错误。

有什么我想念的吗?或者这是无法完成的事情?

提前致谢。

1 个答案:

答案 0 :(得分:3)

缺少关键字DO

WHILE Syntax
[begin_label:] WHILE search_condition DO
    statement_list
END WHILE [end_label]

所以你的SQL应该是:

DROP PROCEDURE IF EXISTS test;
DELIMITER #
CREATE PROCEDURE test()
BEGIN

DECLARE i INT UNSIGNED DEFAULT 1;

-- next line needs a DO at the end
WHILE i < 30 DO                    
    INSERT INTO account (login, password)
    SELECT concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9';

    SET i = i + 1;
END WHILE;
COMMIT; 
END #

DELIMITER;