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
'programing' 카테고리의 다른 글
| MySql 쿼리에서 RegEx vs LIKE의 성능 (0) | 2023.09.21 |
|---|---|
| 하나의 행을 다른 테이블의 여러 행에 결합 (0) | 2023.09.21 |
| aria- expanded= "true"를 사용하여 CSS 속성을 변경하는 방법 (0) | 2023.09.21 |
| 사용자 프로세스 쉐도우 mysqld 서비스, 잘못된 명령은 어떻게 찾을 수 있습니까? (0) | 2023.09.21 |
| AppCompat v21을 사용하여 안드로이드에서 floating action button(FAB)을 만드는 방법? (0) | 2023.09.21 |