[SQL] MySQL의에서 외래 키 열 이름 바꾸기
SQLMySQL의에서 외래 키 열 이름 바꾸기
우리는 다른 테이블에 외래 키의 MySQL의 열 (5.1.31, 이노)의 이름을 위해 노력하고 있습니다.
첫째, 우리는 장고 남쪽을 사용하려고하지만, 알려진 문제에 대해 와서 :
http://south.aeracode.org/ticket/243
과
이 오류 (150)는 확실히 외래 키 제약 조건에 관한 것이다. 참조 예를 들어,
MySQL의 오류 1025 (HY000)는 무엇을 않습니다 './foo'(errno를 : 150)의 이름 바꾸기에 오류가 의미?
http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained/
그래서, 지금 우리는 원시 SQL에서 이름 변경을하려고 노력하고 있습니다. 그것은 우리가 그 다음, 먼저 외래 키를 삭제 이름 변경을 수행 한 후 다시 외래 키를 추가해야 할 것있는 것처럼 보인다. 소리의 권리를합니까? 이 혼란과 불편 꽤 보이기 때문에 더 좋은 방법이 있나요?
어떤 도움이 많이 주시면 감사하겠습니다!
해결법
-
==============================
1.AFAIK는 제약 조건을 삭제 한 후 다음 제약 다시는 유일한 방법입니다 추가, 이름을 바꿉니다. 백업 첫 번째!
AFAIK는 제약 조건을 삭제 한 후 다음 제약 다시는 유일한 방법입니다 추가, 이름을 바꿉니다. 백업 첫 번째!
-
==============================
2.경우 누군가는 이런 식 구문을 찾고있다 :
경우 누군가는 이런 식 구문을 찾고있다 :
alter table customer_account drop foreign key `FK3FEDF2CC1CD51BAF`; alter table customer_account add constraint `FK3FEDF2CCD115CB1A` foreign key (campaign_id) REFERENCES campaign(id);
-
==============================
3.여기에 일반 키에 대한 SQL 구문은
여기에 일반 키에 대한 SQL 구문은
ALTER TABLE `thetable` DROP KEY `oldkey`, ADD KEY `newkey` (`tablefield`);
-
==============================
4.듀이의 대답 @에 확장, 여기에 유용한 방식 ( "FK__"+ 테이블 이름 + "__"+ 참조 테이블 이름)에 최대 절전 모드에 의해 생성 된 이름 바꾸기 FKS에 약간의 스크립트입니다.
듀이의 대답 @에 확장, 여기에 유용한 방식 ( "FK__"+ 테이블 이름 + "__"+ 참조 테이블 이름)에 최대 절전 모드에 의해 생성 된 이름 바꾸기 FKS에 약간의 스크립트입니다.
SELECT CONCAT( "alter table ", TABLE_NAME, " drop foreign key ", CONSTRAINT_NAME,";\n", "alter table ", TABLE_NAME, " drop key ", CONSTRAINT_NAME, ";\n", "alter table ", TABLE_NAME, " add key FK__", table_name, "__", referenced_table_name, " (", column_name, ");\n", "alter table ", TABLE_NAME, " add constraint FK__", table_name, "__", referenced_table_name , " foreign key (", column_name, ") ", "references ", referenced_table_name, "(", referenced_column_name, ");" ) AS runMe FROM information_schema.key_column_usage WHERE TABLE_SCHEMA='myschemaname' AND constraint_name like 'FK_%';
A는 출력 비트 :
alter table visitor_browsers drop foreign key FK_4ygermmic4fujggq1kp96dx47; alter table visitor_browsers drop key FK_4ygermmic4fujggq1kp96dx47; alter table visitor_browsers add key FK__visitor_browsers__websites (website); alter table visitor_browsers add constraint FK__visitor_browsers__websites foreign key (website) references websites(id);
-
==============================
5.다음 쿼리는 자동으로 올바른 구문을 만들 것이다. 다만 각 라인을 반환하고 모든 FKEYs이 사라질 것입니다 실행합니다.
다음 쿼리는 자동으로 올바른 구문을 만들 것이다. 다만 각 라인을 반환하고 모든 FKEYs이 사라질 것입니다 실행합니다.
나는 당신을 위해 운동과 역 (다시 추가)를 둡니다.
SELECT CONCAT("alter table ", TABLE_NAME," drop foreign key `", CONSTRAINT_NAME,"`; ") AS runMe FROM information_schema.key_column_usage WHERE TABLE_SCHEMA='MY_SCHEMA_NAME';
-
==============================
6.당신이 GUI 도구를 사용하는 경우이 작업은 간단해진다. 나는하게 IntelliJ IDEA 데이터베이스 도구를 사용하여 ID 열 이름을 바꿀 시도하고 마법처럼 일했다! 나는 테이블 또는 열 이름을 바꿀 때 외부 키에 대해 걱정 할 필요가 없습니다.
당신이 GUI 도구를 사용하는 경우이 작업은 간단해진다. 나는하게 IntelliJ IDEA 데이터베이스 도구를 사용하여 ID 열 이름을 바꿀 시도하고 마법처럼 일했다! 나는 테이블 또는 열 이름을 바꿀 때 외부 키에 대해 걱정 할 필요가 없습니다.
하게 IntelliJ IDEA 도움말에서 자세한 내용보기 | 항목 이름 바꾸기.
from https://stackoverflow.com/questions/2014498/renaming-foreign-key-columns-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 합니까 UNION ALL 결과 집합의 순서를 보장 [중복] (0) | 2020.05.13 |
---|---|
[SQL] SQL 서버 업데이트 그룹에 의해 (0) | 2020.05.13 |
[SQL] 합니까 SQL은 순서는 성능에 영향을 미칠 JOIN? (0) | 2020.05.13 |
[SQL] 어떻게 MIN 또는 MAX에서 널 (null) 값을 포함 할 수 있습니까? (0) | 2020.05.13 |
[SQL] EF 핵심 엔티티 테이블 구조를 참조 카테고리 부모 ID 자체지도 (0) | 2020.05.13 |