자동 증분 기본 키를 사용하여 MySQL에 데이터를 삽입하는 방법은 무엇입니까?


88

기본 키를 사용하여 테이블을 만들고 활성화했습니다 AUTO_INCREMENT. MYSQL을 사용하려면 어떻게해야 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)
);

다음은 내가 사용한 쿼리입니다. 첫 번째 값에 대해 ""및 "1"을 시도했지만 작동하지 않습니다.

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

답변:


75

열의 자동 증가 기능을 활용하려면 행을 삽입 할 때 해당 열에 값을 제공하지 마십시오. 데이터베이스가 값을 제공합니다.

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

하지만 나를 위해 붙여 넣은 쿼리는 프라이 머리 키에 대한 값을 입력합니까 ??
Salman Raza

3
@SalmanRaza : 아니요,보세요 : "hostcheck_id"열이 제가 제안한 쿼리에서 누락되었습니다. 23 개의 열에 대해서만 값을 제공했지만 테이블에는 24 개의 열이 있습니다. Adrian의 제안도 효과가있을 것 같지만 그렇게 할 수 있는지 몰랐습니다!
Celada 2012 년

4
이 사이트에 대한 @Celada 좋은 점 - 자신의 대답이 경우에도 당신이 뭔가를 배울 올바른 :-)
아드리안 콘월어

1
@ 답장을 보내 주셔서 감사합니다! 내가 primery 키 열의 '0'값 성공에서 그것을 도와
살만 라자


14

default키워드는 나를 위해 작동합니다 :

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)

mysql --version5.1.66을 실행 하고 있습니다.

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

값이 열 순서와 일치하는 한 열 이름을 그대로 둘 수 있습니다. 그렇게하는 것은 나쁜 습관으로 간주 될 수 있지만 한 번의 빠른 삽입의 경우 좋은 솔루션입니다.
Shahar

@Shahar 이것은 열 이름을 남기는 것보다 훨씬 낫습니다. 이렇게하면 SQL에서 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다
Rusty

@ user3284463 전적으로 동의합니다. 언급 할 가치가 있다고 생각합니다.
Shahar

1
예, 문제는 주문이 NOW와 일치 할 수 있지만 나중에 SQL이 실행될 때 반드시 일치하지는 않는다는 것입니다.
Kzqai

고맙습니다. potgres 10.10은 0 또는 null 값을 넣을 수 없지만 기본적으로 작동합니다.
tarmogoyf

11

게시물 확인

그것에 따르면

AUTO_INCREMENT 열에 값이 지정되지 않았으므로 MySQL은 자동으로 시퀀스 번호를 할당했습니다. 열에 NULL 또는 0을 명시 적으로 할당하여 시퀀스 번호를 생성 할 수도 있습니다.


3

다음 옵션 중 하나를 수행 할 수있는 모든 값을 제공하기 때문에 완전한 혼란없이 테이블에 삽입하는 데 도움이되는 세 가지 가능성이 있습니다. 그러나 AUTO_INCREMENT 열에 대한 값을 "지정" 합니다 .

첫 번째 방법 ( 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'
);

두 번째 방법 ( 경고를 제공하지만 '' {Simple quotes / apostrophes} 제공) :

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

세 번째 접근 방식 ( 기본 제공 ) :

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

테이블을 생성 할 때 정의한 것과 동일한 순서로 모든 값을 포함하는 한 해당 테이블에 삽입 할 때 이러한 예제 중 하나이면 충분합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.