2012-01-06 25 views
46

Birincil anahtarlı ve AUTO_INCREMENT etkinleştirilmiş bir tablo oluşturdum, MYSQL kullanımını nasıl kullanabilirim AUTO_INCREMENT?Otomatik artımlı birincil anahtara sahip MySQL'e veri nasıl eklenir?

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

Kullandığım sorgu burada, ilk değer için "" ve "1" denedim ama işe yaramıyor. satır eklerken o sütun için bir değer kaynağı değil, sütunun otomatik artan özelliğinin avantajından faydalanmak için

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

cevap

42

. Veritabanı sizin için bir değer sağlayacaktır.

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

Ya da sadece BOŞ –

+0

geçmesine ama benim için yapıştırılan sorgu değeri koymak primery için anahtar? –

+2

@SalmanRaza: hayır, bak: önerdiğim sorgudan "hostcheck_id" sütunu eksik. Sadece 23 sütun için değer verdim ama tabloda 24 sütun var. Sanırım Adrian'ın önerisi de işe yarayacaktı, ama bunu yapabileceğini bilmiyordum! – Celada

86

bunu otomatik sihirli atanmış olmasını istiyorsanız 0 NULL veya otomatik artış alanını ayarlayın ...

+2

primil anahtar sütunu için '0' değerini geçmeme yardım edin +1 Bu en basit çözümdür. – CodeBlue

+0

Bu, autoincrement sütun değerini atlamadan farklı olarak benim için çalışıyor. – ASten

+0

Bu kabul edilen cevap olmalı. –

5

Kontrol dışarı this sonrası

buna göre

Yok AUTO_INCREMENT sütunu için değer belirtildi, dolayısıyla MySQL sıra numaraları otomatik olarak atanır. Sıra numaralarını oluşturmak için açıkça NULL veya 0 sütununa atayabilirsiniz.

6

default kelime benim için çalışıyor:

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) 

Ben mysql --version 5.1.66 çalıştırıyorum:

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

Sütun adlarını, değerler sütunların sırasına uygun olduğu sürece bırakabilirsiniz. Bunu yapmak için kötü bir uygulama olarak düşünülebilir, ancak bir kerelik hızlı ekleme için iyi bir çözümdür. – Shahar

+0

@Shahar Bu, sütun adından çıkmaktan çok daha iyidir. Bu şekilde, SQL – user3284463

+0

@ user3284463 ürününüzde neler olup bittiğine dair daha iyi bir fikriniz var, kesinlikle katılıyorum, sadece bahsetmeye değer olduğunu düşünüyorum. – Shahar

İlgili konular