programing

MySql은 두 개의 테이블을 동시에 업데이트합니다.

easyjava 2023. 9. 21. 21:37
반응형

MySql은 두 개의 테이블을 동시에 업데이트합니다.

정규화 해제를 위해 정확하게 동일한 값이 필요한 테이블이 두 개 있습니다.

질문은 이렇습니다.

첫번째 테이블

UPDATE Table_One 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 AND lid = 1 LIMIT 1

두번째 테이블

UPDATE Table_Two 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 LIMIT 1

두 테이블의 유일한 차이점은 이름과 두 테이블에 필드가 없다는 것입니다.lid

어쨌든 두 업데이트를 하나로 합칠 수 있습니까?

설명서에 설명된 대로 다중 테이블 업데이트로 가능해야 합니다.

http://dev.mysql.com/doc/refman/5.5/en/update.html

UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid)
SET
  a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200,
  b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200 
WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1

참고: 다중 테이블은 LIMIT를 지원하지 않으므로 세부 정보에 따라 더 큰 슬픔을 느낄 수 있습니다.

저장된 프로시저 또는 트랜잭션이 더 좋은 솔루션일 수 있습니다.

Table_One에서 Table_Two까지 1 대 1 또는 1 대 다 관계가 있는 경우 다음과 같이 작동합니다.

UPDATE Table_One T1, Table_Two T2 
SET T1.win = T1.win+1, T1.streak = T1.streak+1, T1.score = T1.score+200, 
    T2.win = T2.win+1, T2.streak = T2.streak+1, T2.score = T2.score+200 
WHERE T1.userid = 1 AND T1.lid = 1 AND T2.userid = T1.userid;

테이블에 가입할 수 있는 경우, 두 개의 테이블에 대한 보기를 작성한 다음 해당 보기를 통해 업데이트할 수 있습니다.예제에서는 userid가 적합한 키인 것 같습니다.

보기를 작성할 때는 다음 지침을 준수해야 합니다.

두 개의 개별 쿼리이므로 이와 같이 처리해야 합니다.죄송하지만, 동일한 데이터로 두 개의 테이블을 업데이트하는 경우 데이터베이스를 설계하는 더 나은 방법이 있을 수 있습니다.프로그래밍을 건조 상태로 유지해야 합니다.

편집: 축소해야 합니다. 여러 테이블에 사용할 수 있지만 사용할 수 없습니다.ORDER BY아니면LIMIT.

언급URL : https://stackoverflow.com/questions/8765490/mysql-update-two-tables-at-once

반응형