DELIMITER $$
CREATE PROCEDURE insertt()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<317 DO
INSERT INTO phone_yz(`name`,sex,birthday,age,phone,address )
SELECT  `name`,sex,birthday,age,phone,address
FROM phone_yz
SET i=i+1
END WHILE
END $$
delimiter;call insertt();

解决方案 »

  1.   

    [SQL] 
    CREATE PROCEDURE insertt()
    BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i<317 DO
    INSERT INTO phone_yz(`name`,sex,birthday,age,phone,address )
    SELECT  `name`,sex,birthday,age,phone,address
    FROM phone_yz
    SET i=i+1
    END WHILE
    END ;
    [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO phone_yz(`name`,sex,birthday,age,phone,address )
    SELECT  `name`,se' at line 5
      

  2.   


    -- 少写了分号 
    mysql> create table phone_yz
        -> (`name` int,sex int,birthday int,age int,phone int,address int);
    Query OK, 0 rows affected (0.01 sec)mysql>
    mysql> DELIMITER //
    mysql> CREATE PROCEDURE insertt()
        -> BEGIN
        -> DECLARE i INT DEFAULT 0;
        -> WHILE i<10 DO
        -> INSERT INTO phone_yz(`name`,sex,birthday,age,phone,address )
        -> SELECT  `name`,sex,birthday,age,phone,address
        -> FROM phone_yz;   -- 分号
        -> SET i=i+1;  -- 分号
        -> END WHILE;  -- 分号
        -> END ; //
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> DELIMITER ;
    mysql>
    mysql> insert into phone_yz values(1,1,1,1,1,1) ;
    Query OK, 1 row affected (0.00 sec)mysql>
    mysql> call insertt ;
    Query OK, 512 rows affected (0.03 sec)mysql> select count(*) from phone_yz ;
    +----------+
    | count(*) |
    +----------+
    |     1024 |
    +----------+
    1 row in set (0.00 sec)mysql>
    mysql> drop PROCEDURE insertt ;
    Query OK, 0 rows affected (0.00 sec)mysql> drop table phone_yz ;
    Query OK, 0 rows affected (0.01 sec)mysql>
      

  3.   

    看来mysql对语法要求挺严格的.
      

  4.   

    注意分号,平日发现有语句首先检查结束是否少了分号;
    这里写另一种repeat循环用法
    DELIMITER $$CREATE PROCEDURE insertt()
    BEGIN
    DECLARE i INT DEFAULT 0;
    repeat
    INSERT INTO phone_yz(`name`,sex,birthday,age,phone,address )
    SELECT  `name`,sex,birthday,age,phone,address
    FROM phone_yz;
    SET i=i+1;
    until i>317
    end repeat;
    END $$delimiter ;call insertt();