자동 열은 하나만있을 수 있습니다.


104

MySQL의 '자동 증가 열은 하나만있을 수 있습니다'오류를 어떻게 수정합니까?

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

답변:


119

내 MySQL은 "잘못된 테이블 정의입니다. 자동 열은 하나만있을 수 있으며 키로 정의해야합니다. "그래서 아래의 기본 키를 추가했을 때 작동하기 시작했습니다.

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL,
   primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

6
열이 복합 키의 일부인 경우 올바른 작업 과정은 무엇입니까?
Nubcake

테이블을 변경할 때 구문은 무엇입니까?
Mike Harrison

2
당신 같은 @MikeHarrison 모습은 바로 넣을 수 있습니다 ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

전체 오류 메시지가 울립니다.

오류 1075 (42000) : 잘못된 테이블 정의입니다. 자동 열은 하나만있을 수 있으며 키로 정의해야합니다.

따라서 필드에 추가 primary key하십시오 auto_increment.

CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

13

"키"가 반드시 기본 키를 의미하는 것은 아닙니다 . 다음과 같이 작동합니다.

CREATE TABLE book (
    isbn             BIGINT NOT NULL PRIMARY KEY,
    id               INT    NOT NULL AUTO_INCREMENT,
    accepted_terms   BIT(1) NOT NULL,
    accepted_privacy BIT(1) NOT NULL,
    INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

이것은 인위적인 예이며 아마도 최상의 아이디어는 아니지만 특정 경우에 매우 유용 할 수 있습니다.


이것은 쉽게 업데이트 할 수 있도록 복합 키를 정의하고 싶었지만 디버깅 목적으로 자동 증가 ID를 갖고 싶었던 상황에서 도움이되었습니다. 약간 느린 쓰기를 제외하고 위험 측면에서 알아야 할 사항이 있습니까?
마티아스 마틴

2
@Mattias 아니요, 특별한 위험이 있다고 생각하지 않습니다. 이것은 의도적으로 지원되며 auto 열은 순전히 규칙에 따라 기본 키가됩니다.
Matthew Read

5
CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.