복붙노트

[SQL] MySQL의에서 외래 키 열 이름 바꾸기

SQL

MySQL의에서 외래 키 열 이름 바꾸기

우리는 다른 테이블에 외래 키의 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. ==============================

    1.AFAIK는 제약 조건을 삭제 한 후 다음 제약 다시는 유일한 방법입니다 추가, 이름을 바꿉니다. 백업 첫 번째!

    AFAIK는 제약 조건을 삭제 한 후 다음 제약 다시는 유일한 방법입니다 추가, 이름을 바꿉니다. 백업 첫 번째!

  2. ==============================

    2.경우 누군가는 이런 식 구문을 찾고있다 :

    경우 누군가는 이런 식 구문을 찾고있다 :

    alter table customer_account drop foreign key `FK3FEDF2CC1CD51BAF`; 
    
    alter table customer_account  add constraint `FK3FEDF2CCD115CB1A` foreign key (campaign_id) REFERENCES campaign(id);
    
  3. ==============================

    3.여기에 일반 키에 대한 SQL 구문은

    여기에 일반 키에 대한 SQL 구문은

    ALTER TABLE `thetable`
      DROP KEY `oldkey`, 
      ADD KEY `newkey` (`tablefield`);
    
  4. ==============================

    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. ==============================

    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. ==============================

    6.당신이 GUI 도구를 사용하는 경우이 작업은 간단해진다. 나는하게 IntelliJ IDEA 데이터베이스 도구를 사용하여 ID 열 이름을 바꿀 시도하고 마법처럼 일했다! 나는 테이블 또는 열 이름을 바꿀 때 외부 키에 대해 걱정 할 필요가 없습니다.

    당신이 GUI 도구를 사용하는 경우이 작업은 간단해진다. 나는하게 IntelliJ IDEA 데이터베이스 도구를 사용하여 ID 열 이름을 바꿀 시도하고 마법처럼 일했다! 나는 테이블 또는 열 이름을 바꿀 때 외부 키에 대해 걱정 할 필요가 없습니다.

    하게 IntelliJ IDEA 도움말에서 자세한 내용보기 | 항목 이름 바꾸기.

  7. from https://stackoverflow.com/questions/2014498/renaming-foreign-key-columns-in-mysql by cc-by-sa and MIT license