我正在尝试在MySQL中生成一个连续数字的大表.
我只想要2列; 主键和数字列,范围为0-X,其中X非常大.约.64,000行应该这样做.我试过这段代码没有成功:
CREATE TABLE numbers (
number INT NOT NULL
CONSTRAINT XPKnumbers
PRIMARY KEY CLUSTERED (number)
)
INSERT INTO numbers (number) VALUES (0)
DECLARE @i INT
SET @i = 20
WHILE 0 < @i
BEGIN
INSERT INTO numbers (number)
SELECT number + (SELECT 1 + Max(number) FROM numbers)
FROM numbers
SET @i = @i - 1
END
SELECT * FROM numbers
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
#1064 - 您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED(数字)附近使用正确的语法.在第3行插入n'
有人建议让这项工作吗?
pio*_*trm 20
您缺少分号,逗号,甚至在更正语法之后,每次只是在循环中插入一行时,从表中选择max仍然不是一个好主意.
删除它并使用http://use-the-index-luke.com/blog/2011-07-30/mysql-row-generator中的生成器:
CREATE OR REPLACE VIEW generator_16
AS SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL
SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL
SELECT 15;
CREATE OR REPLACE VIEW generator_256
AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
FROM generator_16 lo, generator_16 hi;
CREATE OR REPLACE VIEW generator_4k
AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
FROM generator_256 lo, generator_16 hi;
CREATE OR REPLACE VIEW generator_64k
AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
FROM generator_256 lo, generator_256 hi;
CREATE OR REPLACE VIEW generator_1m
AS SELECT ( ( hi.n << 16 ) | lo.n ) AS n
FROM generator_64k lo, generator_16 hi;
Run Code Online (Sandbox Code Playgroud)
如果出于某种原因,你真的需要一个数字表来做:
INSERT INTO numbers(number)
SELECT n FROM generator_64k WHERE n < 64000
Run Code Online (Sandbox Code Playgroud)