MySQL: #1075 - 잘못된 테이블 정의; 자동 증분과 다른 키?
MySQL 5.3.X+ 데이터베이스의 표는 다음과 같습니다.
CREATE TABLE members` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`memberid` VARCHAR( 30 ) NOT NULL ,
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`firstname` VARCHAR( 50 ) NULL ,
`lastname` VARCHAR( 50 ) NULL ,
UNIQUE (memberid),
PRIMARY KEY (id)
) ENGINE = MYISAM;
ID 열은 쿼리에서 사용되지 않습니다. 단지 시각적 편의를 위해 사용되므로 테이블이 어떻게 커지는지 쉽게 확인할 수 있습니다.Memberid는 실제 키이며 고유하며 Memberid는 쿼리에서 멤버를 식별하는 데 사용됩니다(WHERE memberid='sysde').
제 질문은 auto_increment를 유지하면서 memberid를 기본 키로 만드는 방법입니다.그게 가능한가요?기본 키(memberid)로 이 테이블을 만들 때 다음 오류가 발생합니다.
1075 - 잘못된 테이블 정의. 자동 열은 하나만 있을 수 있으며 키로 정의해야 합니다.
성능이 매우 중요한 경우(디스크 공간이 중요하지는 않지만) ID 열을 유지하여 성능이 양호하고 쿼리가 ID가 아닌 멤버 ID로 사용자를 식별하는 방법이 있기를 바랍니다.
다음이 아닌 자동 증분 열을 가질 수 있습니다.PRIMARY KEY인덱스(키)가 있는 한:
CREATE TABLE members (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
memberid VARCHAR( 30 ) NOT NULL ,
`time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
firstname VARCHAR( 50 ) NULL ,
lastname VARCHAR( 50 ) NULL ,
PRIMARY KEY (memberid) ,
KEY (id) --- or: UNIQUE KEY (id)
) ENGINE = MYISAM;
먼저 auto_increment 없이 테이블을 만듭니다.
CREATE TABLE `members`(
`id` int(11) NOT NULL,
`memberid` VARCHAR( 30 ) NOT NULL ,
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`firstname` VARCHAR( 50 ) NULL ,
`lastname` VARCHAR( 50 ) NULL
PRIMARY KEY (memberid)
) ENGINE = MYISAM;
ID를 인덱스로 설정한 후,
ALTER TABLE `members` ADD INDEX(`id`);
ID를 auto_message로 설정한 후,
ALTER TABLE `members` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;
또는
CREATE TABLE IF NOT EXISTS `members` (
`id` int(11) NOT NULL,
`memberid` VARCHAR( 30 ) NOT NULL ,
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`firstname` VARCHAR( 50 ) NULL ,
`lastname` VARCHAR( 50 ) NULL,
PRIMARY KEY (`memberid`),
KEY `id` (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
id를 기본 키로 설정하고 member_id를NOT NULL UNIQUE(당신이 한 짓입니다.)열이 다음과 같은 열NOT NULL UNIQUE기본 키와 마찬가지로 외부 키 참조의 대상이 될 수 있습니다. (모든 SQL 플랫폼에 해당됩니다.)
개념적 수준에서, 사이에는 차이가 없습니다.PRIMARY KEY그리고.NOT NULL UNIQUE물리적 수준에서는 MySQL 문제입니다. 다른 SQL 플랫폼에서는 시퀀스를 기본 키로 지정하지 않고 사용할 수 있습니다.
하지만 성능이 정말 중요하다면, 작은 시각적 편의를 위해 테이블을 한 줄에 4바이트씩 확장하는 것에 대해 다시 한번 생각해봐야 합니다.또한 외부 키 제약 조건을 적용하기 위해 INNODB로 전환하면 MySQL은 클러스터된 인덱스에서 기본 키를 사용합니다.기본 키를 사용하지 않기 때문에 성능이 저하될 수 있습니다.
저는 당신의 실수의 이유가 무엇인지 이해한다고 생각합니다.먼저 AUTO AUTO INCREMENT 필드를 클릭한 다음 기본 키로 선택합니다.
올바른 방법은 먼저 기본 키로 선택한 다음 AUTO INCREMENT 필드를 클릭해야 합니다.
아주 쉽습니다.감사해요.
위 문제의 경우, 우선 테이블에 기본 키가 1개 이상 포함되어 있다고 가정하면 먼저 기본 키를 모두 제거하고 첫 번째 AUTO INCRENT 필드를 기본 키로 추가한 다음 이전에 제거된 다른 필수 기본 키를 추가합니다.옵션 영역에서 필수 필드에 대한 AUTO INCREMENT 옵션을 설정합니다.
이 스레드를 읽는 동안 이 솔루션을 식별했습니다.아마 다음 남자를 위해 이 글을 올렸을 거예요.
패키지에서 Laravel 마이그레이션 파일을 처리할 때 이 문제가 발생했습니다.
나의 예전 가치는
$table->increments('id');
나의 새로운
$table->integer('id')->autoIncrement();
언급URL : https://stackoverflow.com/questions/8114535/mysql-1075-incorrect-table-definition-autoincrement-vs-another-key
'programing' 카테고리의 다른 글
| Android SQLite에서 Maria로 여러 데이터 동기화DB (0) | 2023.08.29 |
|---|---|
| 두 SQL Server 데이터베이스를 비교하는 무료 도구는 무엇입니까? (0) | 2023.08.29 |
| 함수 호출에 여러 별표를 사용하면 무슨 소용이 있습니까? (0) | 2023.08.29 |
| SQL SELECT 문이 DELETE에 대해 작동하지 않습니다. (0) | 2023.08.29 |
| 온라인/오프라인 이벤트 크로스 브라우저를 탐지하는 방법은 무엇입니까? (0) | 2023.08.29 |