web-dev-qa-db-fra.com

Comment insérer des données dans MySQL avec une clé primaire auto incrémentée?

J'ai créé une table avec une clé primaire et activé AUTO_INCREMENT, comment puis-je utiliser MYSQL avec 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)
);

Voici la requête que j'ai utilisée, j'ai essayé "" et "1" pour la première valeur mais cela ne fonctionne pas.

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

Afin de tirer parti de la capacité d'auto-incrémentation de la colonne, ne fournissez pas de valeur pour cette colonne lors de l'insertion de lignes. La base de données fournira une valeur pour vous.

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

Définissez le champ d'incrémentation automatique sur NULL ou sur 0 si vous souhaitez qu'il soit automatiquement attribué par magie ...

125
Adrian Cornish

Le mot clé default fonctionne pour moi:

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)

J'utilise 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

Départ this post

Selon cela

Aucune valeur n'ayant été spécifiée pour la colonne AUTO_INCREMENT, MySQL a attribué automatiquement les numéros de séquence. Vous pouvez également attribuer explicitement NULL ou 0 à la colonne pour générer des numéros de séquence.

7
Amar Palsapure

Je vois ici trois possibilités qui vous aideront à insérer dans votre tableau sans créer de désordre complet mais "spécifiant" une valeur pour la colonne AUTO_INCREMENT, puisque vous fournissez toutes les valeurs vous pouvez choisir l’une des options suivantes.

Première approche (Fournir 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'
);

Deuxième approche (Fournir '' {Citations simples/apostrophes} bien que cela vous avertisse):

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

Troisième approche (Fournir par défaut):

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

L'un ou l'autre de ces exemples devrait suffire lors de l'insertion dans cette table tant que vous incluez toutes les valeurs dans le même ordre que vous les avez définies lors de la création de la table.

0
Xedret