sourcecode

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

copyscript 2022. 9. 17. 09:50
반응형

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

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;

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;

완전한 에러 메세지가 울립니다.

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

또한 "키"가 반드시 기본 키를 의미하는 은 아닙니다.다음과 같은 기능이 있습니다.

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;

이것은 의도된 예이며 최선의 아이디어는 아닐 수 있지만 경우에 따라서는 매우 유용할 수 있습니다.

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

프라이머리 키를 작성하지 않은 경우 SEQUALIZE는 기본 이름의 프라이머리 키를 자동으로 생성하기 때문에 이 문제가 발생합니다.id당신이 이미 1개를 만들고 SEQUALISE도 1개를 작성했기 때문에 중복이것에 의해 중복이 발생합니다.하지만 당신이 정의했을 때id를 프라이머리 키로서 사용합니다.SEQUALIZE가 기본값을 생성하지 않았습니다.id프라이머리 키

언급URL : https://stackoverflow.com/questions/8645889/there-can-be-only-one-auto-column

반응형