使用 MariaDB 根据现有数据创建随机记录

问题描述 投票:0回答:1

在现有表格的基础上,我们需要创建一个随机集。这是我们尝试创建的记录,但所有字段均为 NULL;

CREATE PROCEDURE `create_data` ()
BEGIN
    declare done bool default false;
    declare anrede varchar(50);
    declare vorname varchar(50);
    declare nachname varchar(50);

    declare _vorname cursor for select anrede, vorname from vorname order by rand();
    declare _nachname cursor for select nachname from nachname order by rand();

    declare continue handler for not found set done = true;

    open _vorname;
    open _nachname;

    create_record: loop
        fetch _vorname into anrede, vorname;
        fetch _nachname into nachname;

        insert into lp values( null,
            anrede,
            vorname,
            nachname
        );
        if done then
            leave create_record;
        end if;

    end loop;
END

我们在这里错过了什么?

mariadb
1个回答
0
投票

请提供

SHOW CREATE TABLE lp

整个过程可以简化为一条语句:

INSERT into lp 
       ( anrede, vorname, nachname )
    SELECT null,
        v.anrede,
        v.vorname,
        v.nachname
      FROM vorname AS v
      JOIN nachname AS n  ON TRUE
      ORDER BY RAND();

这可能是一个大表(vorname 的大小乘以 nachname 的大小)。如果您想要一张较小的桌子(就像您想要做的那样),那么

INSERT into lp 
       ( anrede, vorname, nachname )
    SELECT
        ( SELECT anrede FROM vorname ORDER BY RAND() LIMIT 1 ) AS anrede,
        ( SELECT vorname FROM vorname ORDER BY RAND() LIMIT 1 ) AS vorname,
        ( SELECT nachname FROM nachname ORDER BY RAND() LIMIT 1 ) AS nachname
      LIMIT 1000;

第二个版本随机混合名称部分并生成恰好 1000 个名称。

使用

INSERT...SELECT...;
避免了声明变量和循环的需要。而且可能要快得多。

我认为

NULL
的目标是
AUTO_INCREMENT
;将其省略(就像我所做的那样)具有相同的效果。

© www.soinside.com 2019 - 2024. All rights reserved.