2012-01-06 10 views
46

Ho creato una tabella con una chiave primaria e abilitato AUTO_INCREMENT, come faccio ad usare MySQL AUTO_INCREMENT?Come inserire dati su MySQL con chiave primaria incrementata automatica?

CREATE TABLE IF NOT EXISTS test.authors (
    hostcheck_id INT PRIMARY KEY AUTO_INCREMENT, 
    instance_id INT, 
    host_object_id INT, 
    check_type INT, 
    is_raw_check INT, 
    current_check_attempt INT, 
    max_check_attempts INT, 
    state INT, 
    state_type INT, 
    start_time datetime, 
    start_time_usec INT, 
    end_time datetime, 
    end_time_usec INT, 
    command_object_id INT, 
    command_args VARCHAR(25), 
    command_line VARCHAR(100), 
    timeout int, 
    early_timeout INT, 
    execution_time DEC(18,5), 
    latency DEC(18,3), 
    return_code INT, 
    output VARCHAR(50), 
    long_output VARCHAR(50), 
    perfdata VARCHAR(50) 
); 

Ecco la domanda che ho usato, ho provato "" e "1" per il primo valore, ma non funziona.

INSERT INTO test.authors VALUES ('1','1','67','0','0','1','10','0','1', 
'2012-01-03 12:50:49','108929','2012-01-03 12:50:59','198963','21','', 
'/usr/local/nagios/libexec/check_ping 5','30','0','4.04159','0.102','1', 
'PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms','', 
'rta=2.860000m=0%;80;100;0'); 

risposta

42

Per sfruttare la capacità di auto-incremento della colonna, non fornire un valore per quella colonna durante l'inserimento righe. Il database fornirà un valore per te.

INSERT INTO test.authors (
    instance_id,host_object_id,check_type,is_raw_check, 
    current_check_attempt,max_check_attempts,state,state_type, 
    start_time,start_time_usec,end_time,end_time_usec,command_object_id, 
    command_args,command_line,timeout,early_timeout,execution_time, 
    latency,return_code,output,long_output,perfdata 
) VALUES (
    '1','67','0','0','1','10','0','1','2012-01-03 12:50:49','108929', 
    '2012-01-03 12:50:59','198963','21','', 
    '/usr/local/nagios/libexec/check_ping 5','30','0','4.04159', 
    '0.102','1','PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms', 
    '','rta=2.860000m=0%;80;100;0' 
); 
+76

O semplicemente passare NULL –

+0

ma la query si è incollato per me mettere il valore per la chiave primaria ?? –

+2

@SalmanRaza: no, guarda: manca la colonna "hostcheck_id" dalla query che ho suggerito. Ho dato valori solo per 23 colonne ma ci sono 24 colonne nella tabella. Immagino che anche il suggerimento di Adrian funzionerebbe, ma non sapevo che potessi farlo! – Celada

86

Impostare il campo di incremento automatico NULL o 0 se si vuole che sia auto magicamente assegnato ...

+2

+1 Questa è la soluzione più semplice. – CodeBlue

+0

Questo funziona per me a differenza del salto del valore della colonna di autoincremento. – ASten

+0

Questa dovrebbe essere la risposta accettata. –

5

Partenza this postale

In base ad esso

No il valore è stato specificato per la colonna AUTO_INCREMENT, quindi i numeri di sequenza assegnati automaticamente a MySQL . È anche possibile esplicitamente assegnare NULL o 0 alla colonna per generare numeri di sequenza.

6

Il default parola chiave funziona per me:

mysql> insert into user_table (user_id, ip, partial_ip, source, user_edit_date, username) values 
(default, '39.48.49.126', null, 'user signup page', now(), 'newUser'); 
--- 
Query OK, 1 row affected (0.00 sec) 

sto correndo mysql --version 5.1.66:

mysql Ver 14.14 Distrib **5.1.66**, for debian-linux-gnu (x86_64) using readline 6.1 
+0

È possibile lasciare i nomi delle colonne fino a quando i valori corrispondono all'ordine delle colonne. Può essere considerato una cattiva pratica farlo, ma per un inserimento rapido una tantum è una buona soluzione. – Shahar

+0

@Shahar Questo è molto meglio che lasciare il nome della colonna. In questo modo, hai una migliore idea di cosa sta succedendo nel tuo SQL – user3284463

+0

@ user3284463 Sono totalmente d'accordo, penso solo che sia degno di nota. – Shahar

Problemi correlati