source

mysql에서 외부 키의 이름을 변경하려면 어떻게 해야 합니까?

bestscript 2023. 9. 17. 17:50

mysql에서 외부 키의 이름을 변경하려면 어떻게 해야 합니까?

대규모 테이블에서 장기간에 걸친 마이그레이션을 방금 완료한 결과, conversation_tags 테이블에서 다음과 같은 제약 사항이 발생했습니다.

CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

불행히도 어딘가에 버그가 있었습니다. 왜냐하면 우리가 원하는 것은:

CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

제약 조건을 삭제하고 다시 추가하는 것은 또 다른 두 개의 긴 쿼리를 의미합니다.단일 쿼리에서 제약 조건 이름을 변경할 수 있는 방법이 있습니까?

설명서에서:

하나의 ALTER TABLE 문에는 여러 개의 ADD, ALTER, DROP CHANGE 절이 쉼표로 구분되어 허용됩니다.표준 SQL에 대한 MySQL 확장으로 ALTER TABLE 문당 각 절 중 하나만 허용합니다.

이렇게 하면 드롭과 재생성을 하나의 쿼리로 결합할 수 있으며 제약 조건을 드롭하고 두 개의 쿼리로 만드는 것보다 빠를 수 있습니다.

ALTER TABLE conversation_tags
DROP FOREIGN KEY `conversation_tags_ibfk_1`,
ADD CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);

죄송합니다. 제약 조건은 내 SQL에서만 삭제하고 다시 연결할 수 있습니다.

이 기능은 mysql ALTER TABLE 구문에서 사용할 수 없는 것 같습니다.

그러나 Oracle에 대해서는 지원됩니다.

MySQL 용어 "제약사항" 대 "외산" 차이에서 제 답변을 참조해 주십시오.제약 조건 이름이 원하는 것과 다른 이유를 이해합니다.그러나 MySQL에는 이름 변경 제한 기능이 없으므로 원하는 이름으로 DROP 및 FK를 추가해야 합니다. https://dev.mysql.com/doc/refman/5.5/en/alter-table.html

언급URL : https://stackoverflow.com/questions/6188011/how-do-i-rename-a-foreign-key-in-mysql