2012-03-17 26 views
9

Tôi đang cố tạo một bảng lớn các số liên tiếp trong mysql. Tôi chỉ muốn 2 cột; một cột chính và một cột số với phạm vi 0-X, trong đó X là rất lớn. Xấp xỉ. 64.000 hàng nên làm điều đó. Tôi đã thử mã này không có thành công:Tạo "Bảng số" trong 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 

và tôi nhận được lỗi này:

#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

Bất kỳ ai có bất cứ đề nghị để làm cho công việc này?

+0

Thêm phần 'giá trị' của 'chèn vào giá trị bảng (cột) (giá trị) –

Trả lời

18

Bạn đang thiếu dấu chấm phẩy, dấu phẩy, và ngay cả sau khi chỉnh cú pháp nó vẫn không phải là một ý tưởng tốt để chọn max từ bảng mỗi thời gian chỉ để chèn thêm một hàng trong một vòng lặp.

Drop đó và sử dụng máy phát điện từ 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; 

Và nếu vì lý do gì bạn thực sự cần một bảng các số chỉ làm:

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

Wow, bây giờ đó là những gì tôi đang tìm kiếm. Tôi chưa hiểu mã, nhưng tôi hiểu rằng nó hoạt động. Cám ơn rất nhiều! – user1262890

+0

Ok điều này khiến tôi phát điên. Mã này là chính xác những gì tôi cần. Nó hoạt động trong phpmyadmin và navicat, nhưng khi tôi đưa nó vào trình soạn thảo sql của dreamweaver, nó cho tôi biết có lỗi mysql. Khi tôi để lại mã cho truy vấn trong (mặc dù lỗi) và cố gắng kiểm tra trang web, trang trả về: Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để có cú pháp đúng để sử dụng gần 'TÌM KIẾM HOẶC THAY THẾ generator_256 AS CHỌN ((hi.n << 4) | lo.n) AS n' tại dòng 1 Tôi là gì làm sai? – user1262890

+0

Và khi tôi cố gắng chạy truy vấn để chèn các hàng vào một bảng số trong phpmyadmin, (tôi không thể vừa với tất cả mã trong hộp nhận xét), tôi nhận được: # 1064 - Bạn có lỗi trong cú pháp SQL của mình ; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần 'TẠO HOẶC THAY THẾ VIEW generator_256 AS SELECT ((hi.n < < 4) | lo.n) AS n' tại dòng 9 – user1262890

0

Bạn đang thiếu một dấu phẩy giữa việc kê khai cột và hạn chế:

CREATE TABLE numbers (
    number   INT   NOT NULL, 
    CONSTRAINT XPKnumbers 
     PRIMARY KEY CLUSTERED (number) 
    ) 
Các vấn đề liên quan