특정 이벤트가 내 데이터베이스를 INSERT
으로 업데이트하는 응용 프로그램을 두 테이블 A
및 B
에 적용하는 응용 프로그램이 있습니다. 외래 키가 id_A
인 AB
, id_B
에서 A
및 B
인 연관/링크 테이블이 다 대다 관계를 매핑하는 추가 연결/링크 테이블이 있습니다. 내 질문은 AB
외래 키 중 하나가 응용 프로그램 논리 (이 경우 AUTO_INCREMENT
ID이기 때문에)에 알려지지 않을 때 가장 잘 업데이트하는 방법입니다.자동 증가 외래 키가있는 MySQL 연결 테이블을 자동으로 업데이트합니다.
추가 세부 정보 : 그 값을 삽입하기 전에 알려진되지 않도록
이- 만
id_B
이AUTO_INCREMENT
로 설정됩니다. B
은 복수 행INSERT
으로 업데이트됩니다.A
은 단일 행INSERT
입니다.id_B
은 고유 키이지만ON DUPLICATE KEY UPDATE
이 처리 할 수있는 중복이있을 수 있습니다. 이는 이전 값을 새 값으로 바꿉니다.A
및 은 동일한 이벤트에 대한 응답으로 동일한 트랜잭션에서 업데이트됩니다.- InnoDB를 사용하는 MySQL 5.7.
내 생각은 AB
에 최종 INSERT
이 LAST_INSERT_ID()
에서 id_B
의 값을 얻을 것입니다하지만 분명히 이것은 단지 여러 행의 첫 번째 행의 값을 반환하는 저장 프로 시저의 모든 삽입 문을 포함했다 삽입 : https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id
AB
을 업데이트하는 로직을 부모 테이블을 업데이트하는 데 사용되는 것으로부터 트리거 또는 다른 명령문으로 분리 할 수있는 보너스가 있다고 가정합니다.
편집 : 댓글에 대한 응답. 이것은이 순간에 B
에서 id_B
의 가장 큰 가치를 찾을 수
SET @before = (SELECT MAX(id_B) AS maxIDB
FROM B);
A
및 B
장소 다음 문으로 데이터를 삽입하는 데 사용되는 문 (들) 전
A의 각 레코드와 B의 각 레코드는 항상 AB에 하나 이상의 레코드를 포함합니까? – toonice
분명히 말하면 세 개의 테이블 A, B 및 A_B가 있습니다. 맞습니까? –
둘 중 하나만 SQL INSERT 문을 사용하지 않는 한 두 테이블을 "동시에"삽입 할 수 없습니다. 하나는 다른 하나보다 항상 먼저 발생합니다. –