[SQL] MySQL은, 하나 개의 쿼리에 여러 테이블을 갱신
SQLMySQL은, 하나 개의 쿼리에 여러 테이블을 갱신
나는 세 개의 테이블을 업데이트하는 기능을 가지고,하지만 난이 수행하는 세 개의 쿼리를 사용합니다. 나는 좋은 연습을위한 더 편리한 방법을 사용하고 싶습니다.
어떻게 하나의 쿼리를 MySQL의 여러 테이블을 갱신 할 수 있습니까?
해결법
-
==============================
1.두 테이블, 도서 및 주문의 경우를보십시오. 경우에, 우리는 주문 표에 Order.ID = 1002 특정 순서로 책의 수를 증가 후, 우리는 또한 줄일 필요가있는 책 테이블에서 같은 번호로 우리의 재고 도서의 총 수.
두 테이블, 도서 및 주문의 경우를보십시오. 경우에, 우리는 주문 표에 Order.ID = 1002 특정 순서로 책의 수를 증가 후, 우리는 또한 줄일 필요가있는 책 테이블에서 같은 번호로 우리의 재고 도서의 총 수.
UPDATE Books, Orders SET Orders.Quantity = Orders.Quantity+2, Books.InStock = Books.InStock-2 WHERE Books.BookID = Orders.BookID AND Orders.OrderID = 1002;
-
==============================
2.
UPDATE t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id SET t1.a = 'something', t2.b = 42, t3.c = t2.c WHERE t1.a = 'blah';
이 업데이트 가고, 당신은 예컨대 select 문,이 점을 변환 할 수 있는지 확인하려면 :
SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c FROM t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id WHERE t1.a = 'blah';
다른 대답과 같은 테이블을 사용하는 예 :
SELECT Books.BookID, Orders.OrderID, Orders.Quantity AS CurrentQuantity, Orders.Quantity + 2 AS NewQuantity, Books.InStock AS CurrentStock, Books.InStock - 2 AS NewStock FROM Books INNER JOIN Orders ON Books.BookID = Orders.BookID WHERE Orders.OrderID = 1002; UPDATE Books INNER JOIN Orders ON Books.BookID = Orders.BookID SET Orders.Quantity = Orders.Quantity + 2, Books.InStock = Books.InStock - 2 WHERE Orders.OrderID = 1002;
편집하다:
그냥 재미를 위해,의 좀 더 흥미로운 무언가를 추가 할 수 있습니다.
하자 당신이 책의 테이블과 저자의 테이블을 말한다. 당신의 책은 author_id 있습니다. 데이터베이스를 처음에 만들 때, 어떤 외부 키 제한 조건이 설정되지 않았다 나중에 프런트 엔드 코드에서 버그가 어떤 책이 잘못 author_ids에 추가 할 원인이되었다. DBA가로서 당신은 결정이 데이터를 포착하는 오른쪽 저자를 가리 키도록 책을 해결할 것을 만들어 있도록 author_id이 있어야 할 내용을 확인하기 위해이 책을 모두 통과해야하고 싶지 않아요. 그러나 각각의 통과와의 당신이 author_id를 가지고있는 사람이 실제 저자에 해당이 올바른지 것을 알고 가정 해 봅시다 너무 많은 책이있다. 그것은 무효 존재하지 않는 author_ids이 바로 그들이다. 사용자가 책의 정보를 업데이트하고 개발자가 바로이 문제에 대해 그것을 변경하지 않으위한 인터페이스가 이미 있습니다. 그러나 기존의 인터페이스는 무효 저자와 책을 모두 제외되도록 내부가, 저자 가입한다.
당신이 할 수있는 것은 이것이다 : "알 수없는 작가"와 같은 가짜 저자 레코드를 삽입합니다. 그리고 알 수없는 저자를 차례로 모든 나쁜 기록의 author_id를 업데이트합니다. 그런 다음 데이터를 포착하는은, "알 수없는 작가"의 저자 설정된 모든 책을 검색 올바른 저자를 조회하고 수정할 수 있습니다.
어떻게 나쁜 기록을 모두 알 수없는 작가를 가리 키도록 업데이트하려면 어떻게해야합니까? 이처럼 (알 수없는 저자의 author_id 가정은 99999입니다) :
UPDATE books LEFT OUTER JOIN authors ON books.author_id = authors.id SET books.author_id = 99999 WHERE authors.id IS NULL;
위는 또한 알 수없는 저자에 NULL의 author_id이 책을 업데이트합니다. 당신이 원하지 않는 경우, 물론 당신이 추가 할 수의 books.author_id는 NULL을지지 않습니다.
-
==============================
3.또한 하나 개의 쿼리가 너무 너무처럼 조인을 사용하여이 작업을 수행 할 수 있습니다 :
또한 하나 개의 쿼리가 너무 너무처럼 조인을 사용하여이 작업을 수행 할 수 있습니다 :
UPDATE table1,table2 SET table1.col=a,table2.col2=b WHERE items.id=month.id;
그리고 단지 물론,이 정보를 제공해드립니다. 여기 조인에 대해 당신은 자세한 내용을보실 수 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/join.html를. 이 주문에 대한 몇 가지 제한도의 여러 테이블에 제한하면 여기에 대해 읽을 수 있습니다 업데이트 : http://dev.mysql.com/doc/refman/5.0/en/update.html ( "가입"F 단지 CTRL +).
-
==============================
4.당신이 말할 때 여러 쿼리는 당신이 여러 SQL 문을 의미합니까 :
당신이 말할 때 여러 쿼리는 당신이 여러 SQL 문을 의미합니까 :
UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;
또는 여러 개의 쿼리 기능을 같이 호출
mySqlQuery(UPDATE table1 SET a=b WHERE c;) mySqlQuery(UPDATE table2 SET a=b WHERE d;) mySqlQuery(UPDATE table3 SET a=b WHERE e;)
전자 캔은 모든 것을 당신이 단순히 다음과 같은 방식으로는 mysql_query 함수를 호출 달성하기 위해 원한 경우 하나는 mysql_query 호출을 사용하여 수행 할 수 :
mySqlQuery(UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;)
이것은 하나의 mySqlQuery () 호출 세 쿼리를 실행합니다.
-
==============================
5.시퀀스에서 여러 SQL 문을 구현하기 위해 : 그것은 무엇 저장 프로 시저가 있습니다 일반적입니다. 롤백을 사용하여 데이터의 일관성을 유지하기 위해, 그들은 즉, 하나 개의 작업 단위, 하나 그들은 모두 그들 중 누구도 없습니다 실행되거나으로 처리되도록 할 수 있습니다.
시퀀스에서 여러 SQL 문을 구현하기 위해 : 그것은 무엇 저장 프로 시저가 있습니다 일반적입니다. 롤백을 사용하여 데이터의 일관성을 유지하기 위해, 그들은 즉, 하나 개의 작업 단위, 하나 그들은 모두 그들 중 누구도 없습니다 실행되거나으로 처리되도록 할 수 있습니다.
from https://stackoverflow.com/questions/4361774/mysql-update-multiple-tables-with-one-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 저장 PL / CSV 파일로 PostgreSQL의에서 pgSQL의 출력 (0) | 2020.03.13 |
---|---|
[SQL] 시스템 테이블 master..spt_values의 목적은 무엇이며, 그 값의 의미는 무엇인가? (0) | 2020.03.12 |
[SQL] SQL은 조인 : 일대 다 관계의 마지막 기록을 선택 (0) | 2020.03.12 |
[SQL] 어떻게 SQL Server의 특정 테이블을 참조하는 모든 외래 키를 나열 할 수 있습니다? (0) | 2020.03.12 |
[SQL] SQL 서버 2008 관리 스튜디오 내 쿼리의 구문을 확인하지 (0) | 2020.03.12 |