2012-03-17 4 views
9

Я пытаюсь создать большую таблицу последовательных чисел в mysql. Я просто хочу 2 столбца; первичный ключ и столбец чисел с диапазоном 0-X, где X очень большой. Прибл. Это должно сделать 64 000 строк. Я попробовал этот код без успеха:Создание таблицы чисел в mysql

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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED (number)) INSERT INTO n' at line 3

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

+0

Добавить часть «значения» из 'вставить table (columns) values ​​(values) –

ответ

18

У вас не хватает запятой, запятая, и даже после коррекции синтаксиса это еще не очень хорошая идея, чтобы выбрать максимум из таблицы каждый чтобы просто вставить еще одну строку в цикле.

падения, что и использование генераторов из 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 
+0

Вау, теперь это то, что я искал. Я еще не понимаю код, но я понимаю, что он работает. Спасибо! – user1262890

+0

Хорошо, это сводит меня с ума. Этот код - именно то, что мне нужно. Он работает в phpmyadmin и в navicat, но когда я привожу его в редактор sql Dreamweaver, он говорит мне, что есть ошибка mysql. Когда я оставляю код запроса (несмотря на ошибку) и пытаюсь проверить веб-страницу, возвращается страница: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'CREATE OR REPLACE VIEW generator_256 AS SELECT ((hi.n << 4) | lo.n) AS n' в строке 1 Что я делать не так? – user1262890

+0

И когда я попытался запустить запрос, чтобы вставить строки в таблицу чисел в phpmyadmin, (я не могу вместить весь код в поле комментариев), я получил: # 1064 - У вас есть ошибка в синтаксисе SQL ; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'CREATE OR REPLACE VIEW generator_256 AS SELECT ((hi.n < < 4) | lo.n) AS n' в строке 9 – user1262890

0

Вы пропускаете запятую между декларацией столбца и ограничения:

CREATE TABLE numbers (
    number   INT   NOT NULL, 
    CONSTRAINT XPKnumbers 
     PRIMARY KEY CLUSTERED (number) 
    ) 
Смежные вопросы