it-swarm.com.de

Wie füge ich Daten in MySQL ein, die einen automatisch inkrementierten Primärschlüssel haben?

Ich habe eine Tabelle mit einem Primärschlüssel erstellt und AUTO_INCREMENT Aktiviert. Wie verwende ich MYSQL mit AUTO_INCREMENT?

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)
);

Hier ist die Abfrage, die ich verwendet habe, ich habe "" und "1" für den ersten Wert versucht, aber es funktioniert nicht.

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'); 
66
Salman Raza

Um die automatische Inkrementierung der Spalte zu nutzen, geben Sie beim Einfügen von Zeilen keinen Wert für diese Spalte an. Die Datenbank liefert einen Wert für Sie.

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'
);
57
Celada

Setzen Sie das Auto-Inkrement-Feld auf NULL oder 0, wenn Sie möchten, dass es automatisch magisch zugewiesen wird ...

125
Adrian Cornish

Das Schlüsselwort default funktioniert für mich:

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)

Ich renne mysql --version 5.1.66:

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

Check out this Beitrag

Demnach

Für die AUTO_INCREMENT-Spalte wurde kein Wert angegeben, daher wurden von MySQL automatisch Sequenznummern zugewiesen. Sie können der Spalte auch explizit NULL oder 0 zuweisen, um Sequenznummern zu generieren.

7
Amar Palsapure

Ich sehe hier drei Möglichkeiten, die Ihnen helfen, in Ihre Tabelle einzufügen, ohne ein komplettes Durcheinander zu machen, aber "spezifizieren" einen Wert für die Spalte AUTO_INCREMENT, da Sie alle Werte liefern Sie können eine der folgenden Optionen ausführen.

Erster Ansatz (Angabe von NULL ):

INSERT INTO test.authors VALUES (
 NULL,'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'
);

Zweiter Ansatz (Angabe von '' {Einfache Anführungszeichen/Apostrophe}, obwohl Sie eine Warnung erhalten):

INSERT INTO test.authors 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'
);

Dritter Ansatz (Angabe Standard):

INSERT INTO test.authors VALUES (
 default,'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'
);

Eines dieser Beispiele sollte beim Einfügen in diese Tabelle ausreichen, sofern Sie alle Werte in der Reihenfolge einfügen, in der Sie sie beim Erstellen der Tabelle definiert haben.

0
Xedret