programing

MySQL에서 인덱스 이름을 변경하려면 어떻게 해야 합니까?

javaba 2022. 9. 16. 22:54
반응형

MySQL에서 인덱스 이름을 변경하려면 어떻게 해야 합니까?

인덱스 이름을 바꾸고 싶습니다.대체 테이블 문서를 살펴봤는데 인덱스 이름을 간단히 바꿀 구문을 찾을 수 없습니다.MySQL GUI를 사용하면 인덱스가 폐기되고 새 인덱스가 생성됩니다.이렇게 하는 동안 인덱스 이름을 변경하기 위해 전체 인덱스를 재구축하는 것은 피하고 싶습니다.

[추가 정보]

다른 표의 설명서에 다음과 같이 기재되어 있습니다.

테이블 메타데이터만 수정하고 테이블 데이터는 수정하지 않는 변경은 테이블의 .frm 파일을 수정하고 테이블 내용을 건드리지 않음으로써 즉시 수행할 수 있습니다.이러한 방법으로 신속하게 변경할 수 있는 변경 사항은 다음과 같습니다.

* Renaming a column or index.

단, (테스트 데이터베이스에서) .frm 파일을 편집하고 서버를 재시작하여 인덱스 이름을 변경하려고 하면 열을 나열하려고 할 때 UI에서 "Cannot fetch columns"로 표시되고 쿼리를 실행하려고 하면 "Unknown table engine" 오류가 반환됩니다..frm 파일에는 바이너리 콘텐츠가 많이 포함되어 있습니다.바이너리 정보를 편집하기 위한 좋은 도구가 있나요?

저는 2009년에 이 질문에 대답했습니다.당시 MySQL에는 인덱스 이름을 바꿀 구문이 없었습니다.

그 이후 MySQL 5.7에서는ALTER TABLE RENAME INDEX구문을 사용합니다.

http://dev.mysql.com/doc/refman/5.7/en/alter-table.html는 부분적으로 다음과 같이 말하고 있습니다.

  • RENAME INDEX old_index_name TO new_index_name인덱스의 이름을 변경합니다.이것은 표준 SQL에 대한 MySQL 확장입니다.표의 내용은 변경되지 않습니다. old_index_name동일하지 않은 테이블의 기존 인덱스의 이름이어야 합니다.ALTER TABLE진술. new_index_name는 새로운 인덱스 이름입니다.변경을 적용한 후에는 결과 테이블 내의 인덱스 이름을 복제할 수 없습니다.인덱스 이름은 둘 다 사용할 수 없습니다.PRIMARY.

5.6 이전 버전의 MySQL은 의 구문을 지원하지 않고 인덱스(또는 동의어인 키)의 이름을 변경할 수 있습니다.

유일한 해결책은ALTER TABLE DROP KEY oldkeyname, ADD KEY newkeyname (...).

거기에는 없다ALTER INDEX명령어를 입력합니다.새 이름을 사용해야만 사용할 수 있습니다.


위의 업데이트에 대해: 문서가 충분히 정확하지 않을 수 있습니다.그러나 인덱스 이름을 변경할 SQL 구문은 없습니다.

인덱스는 데이터로부터 재구축할 수 있는 데이터 구조입니다(실제로 인덱스를 정기적으로 재구축하는 것이 좋습니다).OPTIMIZE TABLE이 좀 걸리지만 입니다.) 시간이 좀 걸리지만 일반적인 작업입니다.인덱스 데이터 구조는 테이블 데이터와 분리되어 있으므로 설명서에서 설명한 바와 같이 인덱스를 추가하거나 삭제할 때 테이블 데이터를 건드리지 않아도 됩니다.

『 』에 .frm은 MySQL의 하지 않습니다..frm할 수 없게 % 테이블이 파손되어 사용할 수 없게 되는 것은 100% 보증됩니다.


MySQL 5.7의 경우:

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name

MySQL 이전 버전의 경우:

ALTER TABLE tbl_name DROP INDEX old_index_name, ADD INDEX new_index_name (...)

http://dev.mysql.com/doc/refman/5.7/en/alter-table.html 를 참조해 주세요.

이 질문은 몇 년 전에 이루어졌으며, 반년 전에 마지막으로 업데이트되었습니다.그래도 이 힌트를 추가해야 할 것 같습니다.

인덱스된 열이 다른 곳에서 외부 키로 사용되는 경우 이와 관련된 오류가 발생할 수 있습니다.이렇게 하면 다음과 같은 이점이 있습니다.

SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE tbl DROP INDEX index_name;
ALTER TABLE tbl ADD INDEX new_index_name (indexed_column);
SET FOREIGN_KEY_CHECKS = 1;

누군가 이것을 유용하게 찾길 바란다.

언급URL : https://stackoverflow.com/questions/1463363/how-do-i-rename-an-index-in-mysql

반응형