2009-11-28 2 views
1

나는 '회원'과 '사용자'라는 2 개의 테이블을 가지고 있는데 두 테이블 모두 이름이 & 성입니다. 내가 회원 테이블에 새 '이름'을 추가하는 것이 매번 원하는, 해당 행의 '성'열의 값은 '사용자의 테이블에서 업데이트 될 것입니다 :MySql 테이블 형식, 열 데이터를 한 테이블에서 다른 테이블로 자동으로 그리는 방법은 무엇입니까?

**users:** 
Emilia - F 
John - M 
David - M 
**members:** 
Synthia - F 

'INSERT INTO members VALUES('David')...or whatever' 
now **members:** 
Synthia - F 
David - M 
+1

물리적으로 두 개의 서로 다른 테이블의 동일한 데이터 (성별 열)을 저장하는 관계형 데이터베이스의 정규화 원리 역행 데이터 손상 (어느 시점에서 사용자의 값이 저장되어있는 카피하여 수정되는 것으로 가정 될 수 있습니다 사용자가 섹스를 변경하는 것보다 훨씬 혼란 스럽습니다 ^^ ^) – Rory

답변

4

당신은 insert trigger를 사용할 수 있습니다. 그러나 성별 사본을 두 개의 다른 테이블에 두어서는 안됩니다. 정규화가 중단되고 저장 공간이 더 많이 필요하며 두 복사본이 동기화되지 않을 위험이 있습니다.

대신에 외부 키를 사용하고 양쪽에서 정보가 필요할 때 테이블을 조인해야합니다. 외래 키로 사용자 이름을 사용하거나 자동 증가 ID가 있으면 자동 증가 ID를 사용할 수 있습니다.

3

계산 된 열에 대해 이야기하고 있다고 생각하지만 MySQL에서 지원하는지 잘 모르겠습니다 (Google이 약간 잘못되었거나 잘못 될 수 있음). 왜 대신 두 테이블을 통해 뷰를 만들지 않습니까? 당신은 다음과 같은 것을 시도 할 수 있습니다.

CREATE VIEW MemberDetail 
AS 
    SELECT mem.Name, 
    usr.Gender 
    FROM Members mem 
    INNER JOIN Users usr ON mem.Name = usr.Name; 
+0

5.0부터 MySQL은 뷰를 지원하지만 (구체화 된 뷰는 지원하지 않습니다) –

0

INSERT ... SELECT 구문은 무엇입니까?

INSERT into members (name, gender) 
SELECT u.name, u.gender FROM users u WHERE u.name='Cynthia'; 
관련 문제