Создание таблицы чисел в mysql

Я пытаюсь создать большую таблицу последовательных чисел в 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

и я получаю эту ошибку:

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED (number)) INSERT INTO n 'в строке 3

У кого-нибудь есть предложения, чтобы сделать эту работу?

2 ответа

Вам не нужны точки с запятой, запятые и даже после исправления синтаксиса, все равно не рекомендуется выбирать 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;

И если по какой-то причине вам действительно нужна таблица чисел, просто выполните:

INSERT INTO numbers(number)
SELECT n FROM generator_64k WHERE n < 64000


Вам не хватает запятой между столбцом и объявлением ограничения:

CREATE TABLE numbers (
 number INT NOT NULL,
 CONSTRAINT XPKnumbers
 PRIMARY KEY CLUSTERED (number)
 )

licensed under cc by-sa 3.0 with attribution.