填充到一定数量



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

目前我有

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。

感谢所有人的帮助!

  • 首先,如果您试图执行粘贴的代码,我认为您将遇到分隔符问题。过程声明分隔符必须与过程代码中使用的分隔符不同(此处为";")。您必须使用DELIMITER语句;

  • 您的过程属于一个模式;我不确定您是否可以从其他shema查询表(尤其是在没有USE语句的情况下);

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

  • 如果您有数量有限的相关表,我认为最好为每个表定义一个过程。通过这种方式,表名将在每个过程代码中显式显示,并避免使用准备好的语句;

  • 注意"amount"参数:如果我将INT的最大值作为amount传递,你确定你的服务器可以处理请求吗?

  • 我认为你应该使用'<'而不是'<='在您的WHILE条件下

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

相关内容

  • 没有找到相关文章

最新更新