2010-01-02 4 views
1

시나리오 : 사용자 이름을 변경할 수있는 사용자가 있습니다 (불행히도 사이트를 시작할 때이 기능을 추가하는 것에 대해 생각하지 않았습니다).하지만 MySQL 데이터베이스에는 110 개의 테이블이 있습니다.많은 MySQL 테이블에서 필드를 변경하십시오.

각 테이블의 사용자 이름을 업데이트하기 위해 110 개의 쿼리를 실행하는 스크립트를 만들어야합니다 (또는 새 테이블을 추가 할 때 스크립트를 업데이트해야 함). 또는 모든 필드를 연결하는 방법이 있습니다. 테이블의 사용자 이름을 업데이트하면 다른 테이블에서 사용자 이름이 업데이트됩니다.

+3

여러 테이블에 걸쳐 키를 업데이트하는 것은 좋지 않습니다. 이 기회를 빌어 데이터베이스를 재구성하여 모든 사용자에 대해 자동 증가 정수 기본 키를 추가하고이를 사용자 이름 대신 외래 키로 사용할 수 있습니다. 큰 변화지만 일단 끝나면 후회하지 않을 것입니다. 보너스로 더 나은 성능과 디스크 사용량을 얻을 수 있습니다. –

+0

나는 각 사용자, 사용자 ID에 대해 자동 증가 정수 키를 가지고 있지만, 다른 모든 테이블은 사용자 이름을 참조합니다. 그렇지 않으면 논쟁의 여지가 없으며이 질문을하지 않을 것입니다. –

+0

그래,이게 가능하지 않을 것 같아서 나는 많은 질문을해야 할 것이다. MyISAM을 사용해야하고 사용자 이름 대신 사용자 ID를 사용하도록 전환하는 것은 사이트가 라이브로 간주되는 옵션이 아닙니다. –

답변

1

CASCADING 업데이트를 수행하도록 테이블을 설정할 수 있습니다.

이 외국 키를 사용하여 수행하고 여기에 ON UPDATE CASCADE

좋은 그것에 기사입니다 : http://www.oreillynet.com/onlamp/blog/2004/10/hey_sql_fans_check_out_foreign.html

그리고 공식 MySQL의 페이지 : http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-foreign-keys.html

불행하게도이 이노 용으로 만 따라서 테이블을 전환해야합니다.

0

외래 키 제약 조건을 ON UPDATE CASCADE과 함께 사용하면 외래 키가 수정 될 때 자동으로 외래 키를 업데이트 할 수 있습니다 (InnoDB에만 해당).

그러나 사용자 이름을 외래 키로 사용하지 않는 것이 좋습니다. 일반적으로 surrogate key을 외래 키로 사용해야 문제가되지 않습니다.

+0

이것은 InnoDB 테이블만을위한 것으로, MyISAM에서 구현되지 않았습니다. – danielrsmith

+0

사실, 지적 해 주셔서 감사합니다. 나는 그것을 내 대답에 덧붙였다. –

1

사용자 이름을 기본 키로 사용하고 있다고 가정합니다. 필요가 있다고 생각하기 때문에. auto_increment ID를 사용자 이름 대신 기본 키로 사용하도록 테이블 구조를 변경하고 이름 대신 직접 다른 테이블의 ID를 참조하십시오. 이렇게하면 테이블에서 사용자 이름이 중복되는 것을 방지하고 단일 테이블 만 업데이트하여 사용자 이름을 변경할 수 있습니다.

중복을 막기 위해 사용자 이름에 UNIQUE 색인을 유지하고 싶을 수 있습니다. 현재는 PK로 이름을 사용하여 "무료"로 표시하고 계속해서 DB에서 관리하도록 할 수 있습니다. 새로운 색인을 만든다.

+0

내 의견에 대한 회신에서 그는 모든 사용자에 대해 자동 증가 ID를 갖고 있다고 말했고 이것이 그의 주요 키라고 생각합니다. –

관련 문제