[mysql] MySQL에서 기본 키 제거

user_customers를 라이브 MySQL 데이터베이스의 권한에 매핑하는 다음 테이블 스키마가 있습니다.

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

user_customer_id 및 permission_id의 기본 키를 제거하고 id의 기본 키를 유지하고 싶습니다.

명령을 실행할 때 :

alter table user_customer_permission drop primary key;

다음과 같은 오류가 발생합니다.

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

열의 기본 키를 어떻게 삭제할 수 있습니까?



답변

인덱스가 없으면 자동 증분 열을 유지 관리하는 데 비용이 많이 들기 때문에 MySQL자동 증분 열이 인덱스의 가장 왼쪽 부분이되어야합니다.

키를 삭제하기 전에 자동 증가 속성을 제거해야합니다.

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

PRIMARY KEY세 개의 열을 모두 포함하는 id고유 한 복합 재료가 있다는 점에 유의하십시오 .

이 고유하게 발생하는 경우, 당신은이 될 수 있습니다 PRIMARY KEYAUTO_INCREMENT다시 :

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;


답변

한 줄:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

또한 자동 증분을 잃지 않고 부작용을 일으킬 수있는 자동 증분을 다시 추가해야합니다.


답변

Quassnoi가 귀하의 직접적인 질문에 답변했다고 생각합니다. 참고 사항 : 어쩌면 이것은 어색한 표현 일 수도 있지만 각 필드에 하나씩 기본 키가 세 개 있다는 인상을 받고있는 것 같습니다. 그렇지 않다. 기본적으로 하나의 기본 키만 가질 수 있습니다. 여기에있는 것은 세 개의 필드로 구성된 기본 키입니다. 따라서 “열에 기본 키를 놓을 수 없습니다”. 기본 키를 삭제하거나 기본 키를 삭제하지 않을 수 있습니다. 하나의 열만 포함하는 기본 키를 원하면 기존 기본 키를 3 열에 놓고 1 기본 열에 새 기본 키를 만들 수 있습니다.


답변

ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;


답변

복합 기본 키가있는 경우 다음과 같이하십시오. ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);


답변

“기본 키를 복원하면 AUTO_INCREMENT로 되돌릴 수 있습니다.”

ID 열의 “PK 속성 복원”및 “자동 증가 속성 복원”이 바람직한 지 여부는 의심의 여지가 없습니다.

테이블의 사전 정의에서 자동 증가가 있었으므로 ID 값을 제공하지 않고이 테이블에 삽입하는 일부 프로그램이있을 가능성이 높습니다 (ID 열이 자동 증가하므로).

자동 증분 속성을 복원하지 않으면 이러한 프로그램의 작동이 중단됩니다.


답변

먼저 다음과 같이 auto_increment 필드를 제거하도록 열을 수정하십시오. alter table user_customer_permission modify column id int;

그런 다음 기본 키를 삭제하십시오. 테이블 user_customer_permission 삭제 기본 키를 변경하십시오.