2012-03-17 19 views
9

Sto provando a generare una grande tabella di numeri consecutivi in ​​mysql. Voglio solo 2 colonne; una chiave primaria e una colonna di numeri con un intervallo di 0-X, dove X è molto grande. Circa. 64.000 file dovrebbero farlo. Ho provato questo codice senza successo:Creazione di una "Tabella numeri" in 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 

e ottengo questo errore:

#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

Chiunque ha tutti i suggerimenti per fare questo lavoro?

+0

aggiungere la parte 'valori' di 'insert into valori tabella (colonne) (valori) –

risposta

18

Ti manca un punto e virgola, virgole, e anche dopo la correzione della sintassi non è ancora una buona idea per selezionare max dal tavolo ogni tempo solo per inserire un'altra riga in un ciclo.

goccia che e utilizzare i generatori di 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; 

E se per qualsiasi motivo si ha realmente bisogno di una tabella di numeri basta fare:

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

Wow, ora era quello che stavo cercando. Non ho ancora capito il codice, ma capisco che funzioni. Grazie mille! – user1262890

+0

Ok questo mi sta facendo impazzire. Questo codice è esattamente ciò di cui ho bisogno. Funziona in phpmyadmin e in navicat, ma quando lo inserisco nell'editor sql di Dreamweaver mi dice che c'è un errore mysql. Quando esco dal codice per la query (nonostante l'errore) e provo a testare la pagina Web, la pagina restituisce: Si ha un errore nella sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'CREATE O REPLACE VIEW generator_256 AS SELECT ((hi.n << 4) | lo.n) AS n' alla riga 1 Cosa sono io fare male? – user1262890

+0

E quando ho provato a eseguire la query per inserire le righe in una tabella di numeri in phpmyadmin, (non riesco a inserire tutto il codice nella casella dei commenti), ho ricevuto: # 1064 - Si è verificato un errore nella sintassi SQL ; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'CREATE O REPLACE VIEW generator_256 AS SELECT ((ciao n. < < 4) | lo.n) AS n' alla riga 9 – user1262890

0

Stai manca una virgola tra la dichiarazione colonna e vincolo:

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