MySQL:重复插入到表中

MySQL:重复插入到表中,mysql,while-loop,Mysql,While Loop,给定一个图书编号id和图书份数,我希望在表中插入与图书份数相同的行数。这是我的非工作解决方案: DROP PROCEDURE IF EXISTS insert_into_book_copy_table; CREATE PROCEDURE insert_into_book_copy_table (IN in_book_id INT, IN in_num INT) BEGIN SET @I

给定一个图书编号id图书份数,我希望在表中插入与图书份数相同的行数。这是我的非工作解决方案:

DROP PROCEDURE IF EXISTS insert_into_book_copy_table;
CREATE PROCEDURE insert_into_book_copy_table (IN in_book_id INT,
                                              IN in_num     INT)
BEGIN

    SET @I = 1;
    SET @ACQUIRED = CURRENT_TIMESTAMP;

    WHILE I <= in_num DO 
        INSERT INTO book_copy (book_id, acquired) # The table has an
        VALUES (in_book_id, @ACQUIRED);           # auto-increment field
                                                  # which I didn't list here
        SET @I = @I + 1;
    END WHILE;

END$$

还有更好的编码方法吗?

试试这个,作为一条SQL语句:-

INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM integers a, integers b, integers c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert
插入书本副本(书本id,已获取)
选择a.i+b.i*10+c.i*100+1,$BookId,NOW()
从整数a,整数b,整数c
其中a.i+b.i*10+c.i*100<$NumberToInsert
依赖于一个整数表,该表有一个10行的单列(称为i),值为0到9。将其自身连接两次可以得到从0到999的所有数字(可以很容易地扩展),因此可以在一个语句中插入多达1000本书

编辑-如果不想创建整数表,则可以对返回常量的两个子查询执行相同的操作:-

INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM (SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) a,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) b,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert
插入书本副本(书本id,已获取)
选择a.i+b.i*10+c.i*100+1,$BookId,NOW()
从(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)a,
(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)b,
(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)c
其中a.i+b.i*10+c.i*100<$NumberToInsert

您会遇到什么错误?打字错误?而我,哦,是的,就是这样。我忽略了I。但是你认为这是一种很好的编码方式吗?
INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM (SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) a,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) b,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert