Creando una "Tabla de numbers" en mysql

Intento generar una gran tabla de numbers consecutivos en mysql. Solo quiero 2 columnas; una key principal y una columna de numbers con un range de 0 a X, donde X es muy grande. Aprox. 64,000 filas deberían hacerlo. He intentado este código sin éxito:

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 

y obtengo este error:

# 1064 – Tiene un error en su syntax SQL; verifique el manual que corresponde a su versión del server MySQL para la syntax correcta para usar cerca de 'CONSTRAINT XPKnumbers CLAVE DE CLAVES PRIMARIA (número)) INSERT INTO n' en la línea 3

¿Alguien tiene alguna sugerencia para hacer que esto funcione?

Te faltan puntos y comas, e incluso después de corregir la syntax, no es una buena idea seleccionar max de la tabla cada vez solo para insert una fila más en un bucle.

Suelta eso y usa generadores de 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; 

Y si por alguna razón realmente necesitas una tabla de numbers simplemente hazlo:

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

Falta una coma entre la columna y la statement de restricción:

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