2009-11-10 9 views
3

3 개의 열 (A.id, A.title, A.text 및 B.id, B.a_id, B.text)이있는 두 개의 테이블 A와 B가 있다고 가정합니다. B.a_id는 A.id와 관련된 외래 키입니다. 이제 A (1, 'foo', 'bar')에 B 레코드 (1, 1, 'test')와 (2, 1, 'test1') 레코드가 각각 하나씩 있다고 가정합니다.외래 키를 사용하여 여러 레코드 복사

내 질문에, A에서 레코드를 복사하는 동시에 A와 관련된 B에서 모든 레코드를 복사하는 표준 방법이 있습니까? A ​​(2, '' (1, 'foo', 'bar')에 기초한 B (3, 2, 'test')와 (4, 2, 'test1)?

이전에 트리거를 사용 해 본 적이 없지만, 지금 시작하는 것이 올바른 순간입니까? 또는 이것은 매우 어리석은 질문입니까?

답변

4

이것은 바보 같은 질문이 아닙니다. 그러나, 나는 이것이 순수 SQL로 가능하지 않다고 생각한다. 또는 내가 인식하지 못하는 이국적인 구문으로 만 가능하다. 행을 복사하면 (즉 ID를 가정하는 AUTO_INCREMENT는) 문제가되지 않습니다 :

insert into B (a_id, text) select LAST_INSERT_ID(), text from B where a_id = XY 

흠을 :

insert into A (title, text) select title, text from A where id = XY 

그러나, 당신은 보자 B.의 레코드를 복제하는 마지막 삽입 ID를 찾을 필요 어쩌면이 작동하지만 LAST_INSERT_ID()에 대해 조금 회의적입니다. 어쨌든, 나는 그것이 한 문장으로 끝나지 않을 것이라고 생각합니다.

날이

+0

우수함 어떻게되는지 알려,이 작품! 감사! 이것은 이미 내가 사용한 방법 (분리 된 select와 insert 쿼리 사용)보다 쉽다. –

+0

차가움. 나는이 결합 된 삽입을 사용하지 않았다 ... 전에 구문을 선택한다. 알려 줘서 고마워. –

+0

''LAST_INSERT_ID()''는 현재 프로세스에서 삽입 한 ID를보고 다른 프로세스에서 삽입 한 ID를 무시하기 때문에 다른 프로세스가 테이블을 업데이트하는 동안에도 작동합니다. – kmoser

관련 문제