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
'programing' 카테고리의 다른 글
mariadb를 설치하기 위한 예상 스크립트를 어떻게 작성합니까? (0) | 2022.09.16 |
---|---|
JFrame의 닫기 버튼 클릭 이벤트를 캡처하는 방법 (0) | 2022.09.16 |
그렇지 않으면 html에 내장되어 있는 경우 (0) | 2022.09.16 |
Android.view를 참조.Class Android를 부풀리는 동안 BulgeException 오류가 발생했습니다.Webkit.WebView (0) | 2022.09.16 |
어레이 요소를 삭제하고 어레이를 재인덱스화하는 방법 (0) | 2022.09.16 |