填充到一定数量

时间:2012-02-06 17:07:50

标签: mysql database stored-procedures mysql5

我正在尝试创建一个过程来填充表格,直到达到一定数量的元素。

目前我有

CREATE PROCEDURE PopulateTable(
    IN dbName           tinytext,
    IN tableName        tinytext,
    IN amount           INT)
BEGIN
    DECLARE current_amount INT DEFAULT 0;
    SET current_amount = SELECT COUNT(*) FROM dbName,'.',tableName;
    WHILE current_amount <= amount DO
        set @dll=CONCAT('INSERT INTO `',dbName,'`.`',tableName,'`(',
                        '`',tableName,'_name`) ',
                        'VALUES(\'',tableName,'_',current_amount,'\')');
        prepare stmt from @ddl;
        execute stmt;
        SET current_amount = current_amount + 1;
    END WHILE;
END;

所以我要做的是,一旦用户调用该过程,该函数将检查并查看当前元素的数量,并填充剩余的元素。

我遇到的第一个问题是我不知道如何计算元素,所以我的SELECT COUNT(*) FROM dbName,'.',tableName;不起作用。

我还想提出一个建议,因为如果我正在做的事情是正确的,或者有更好的方法可以做到这一点,我对数据库有点新意了吗?

另外,如果这有任何帮助,我试图这样做的表只有2个字段,其中一个是id,它是自动递增的,是主要的,另一个是我填充的profile_name。

感谢任何人的帮助!

1 个答案:

答案 0 :(得分:2)

  • 首先,如果您尝试执行粘贴的代码,我认为您会遇到分隔符问题。过程声明定界符必须与您在过程代码中使用的定界符不同(此处为';')。您必须使用DELIMITER statement;

  • 您的程序属于架构;我不确定你可以从其他shemas查询表格(特别是没有USE声明);

  • 如果您的数据库包含不应通过您的程序填充的表格,这不是一个好主意;

  • 如果您的关注表数量有限,我认为为每个表定义一个过程会更好。这样,表名在每个过程代码中都是显式的,它将避免使用预准备语句;

  • 小心你'''参数:如果我把INT的最大值作为金额传递,你确定你的服务器可以处理请求吗?

  • 我认为你应该使用'&lt;'而不是在WHILE条件中的'&lt; ='

  • 如果要插入大量行,您将获得更好的性能,执行“分组”插入,或生成包含所有行并执行唯一INSERT的临时表(例如使用MEMORY引擎)选择临时表的内容。