수색…


통사론

  • UPDATE [LOW_PRIORITY] [무시] tableName SET column1 = expression1, column2 = expression2, ... [WHERE 조건]; // 단순한 단일 테이블 업데이트

  • UPDATE [LOW_PRIORITY] [무시] tableName SET column1 = expression1, column2 = expression2, ... [WHERE 조건] [ORDER BY 식 [ASC | DESC]] [LIMIT 행 _ 개수]; // order by와 limit로 업데이트

  • UPDATE [LOW_PRIORITY] [무시] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [WHERE 조건]; // 다중 테이블 업데이트

기본 업데이트

행 업데이트

UPDATE customers SET email='[email protected]' WHERE id=1

이 쿼리는 customers 테이블의 email 내용을 [email protected] 문자열로 [email protected] 여기에서 id 값은 1과 같습니다. 데이터베이스 테이블의 이전 내용과 새로운 내용은 아래 각각 왼쪽과 오른쪽에 나와 있습니다.

여기에 이미지 설명을 입력하십시오.


모든 행 업데이트 중

UPDATE customers SET lastname='smith'

이 쿼리는 customers 테이블의 모든 항목에 대한 lastname 의 내용을 업데이트합니다. 데이터베이스 테이블의 이전 및 새 내용은 각각 왼쪽과 오른쪽에 아래에 설명되어 있습니다.

여기에 이미지 설명을 입력하십시오.

주의 사항 : UPDATE 쿼리에서 조건절 (WHERE)을 사용할 필요가 있습니다. 조건절을 사용하지 않으면 해당 테이블 속성의 모든 레코드가 업데이트됩니다. 위의 예제에서는 customers 테이블의 lastname에 대한 새 값 (Smith)이 모든 행으로 설정되었습니다.

조인 패턴으로 업데이트

questions_mysql 이라는 프로덕션 테이블과 LOAD DATA INFILE 에서 가져온 CSV 데이터의 마지막 배치를 나타내는 테이블 iwtQuestions (임포트 된 작업 테이블)를 고려하십시오. 가져 오기 전에 작업 테이블이 잘리고 데이터가 가져오고 해당 프로세스는 여기에 표시되지 않습니다.

가져온 작업 테이블 데이터에 조인을 사용하여 생산 데이터를 업데이트하십시오.

UPDATE questions_mysql q -- our real table for production 
join iwtQuestions i -- imported worktable 
ON i.qId = q.qId
SET q.closeVotes = i.closeVotes,
q.votes = i.votes, 
q.answers = i.answers, 
q.views = i.views;

별칭 qi 는 테이블 참조를 줄이기 위해 사용됩니다. 이로 인해 개발 및 가독성이 향상됩니다.

qId 는 기본 키이며 Stackoverflow 질문 ID를 나타냅니다. 조인의 일치하는 행에 대해 네 개의 열이 업데이트됩니다.

ORDER BY 및 LIMIT로 업데이트

ORDER BY 절이 갱신 SQL 문에 지정된 경우, 행은 지정된 순서대로 갱신됩니다.

SQL 문에 LIMIT 절이 지정되면, 갱신 할 수있는 행 수에 제한이 있습니다. LIMIT 절을 지정하지 않으면 제한이 없습니다.

ORDER BYLIMIT 는 다중 테이블 업데이트에 사용할 수 없습니다.

ORDER BYLIMIT 를 사용하는 MySQL UPDATE 구문은 다음과 같습니다.

UPDATE [ LOW_PRIORITY ] [ IGNORE ]
tableName
SET column1 = expression1,
    column2 = expression2,
    ...
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT row_count];

---> Example
UPDATE employees SET isConfirmed=1 ORDER BY joiningDate LIMIT 10

위의 예에서 joiningDate 하는 직원의 순서에 따라 10 개의 행이 업데이트됩니다.

다중 테이블 UPDATE

다중 테이블 UPDATE 에서 조건을 충족시키는 각 지정된 테이블의 행을 갱신합니다. 일치하는 각 행은 조건이 여러 번 일치하더라도 한 번 업데이트됩니다.

다중 테이블 UPDATE 에서는 ORDER BYLIMIT 사용할 수 없습니다.

다중 테이블 UPDATE 구문은 다음과 같습니다.

UPDATE [LOW_PRIORITY] [IGNORE] 
table1, table2, ...
    SET column1 = expression1,
        column2 = expression2,
        ...
    [WHERE conditions]

예를 들어 두 개의 테이블, productssalesOrders . 경우에 따라 특정 제품의 수량을 이미 배치 된 판매 오더에서 줄입니다. 그런 다음 우리는 또한 products 테이블의 재고 열에서 그 수량을 늘려야합니다. 이 작업은 아래와 같은 단일 SQL 업데이트 문에서 수행 할 수 있습니다.

UPDATE products, salesOrders
  SET salesOrders.Quantity = salesOrders.Quantity - 5, 
      products.availableStock = products.availableStock + 5
WHERE products.productId = salesOrders.productId
  AND salesOrders.orderId = 100 AND salesOrders.productId = 20;

위의 예에서 수량 '5'는 salesOrders 테이블에서 감소하고 WHERE 조건에 따라 products 테이블에서 동일하게 증가합니다.

대량 업데이트

다른 값으로 여러 행을 업데이트 할 때 대량 업데이트를 사용하는 것이 훨씬 빠릅니다.

UPDATE people 
SET name = 
  (CASE id WHEN 1 THEN 'Karl'
           WHEN 2 THEN 'Tom'
           WHEN 3 THEN 'Mary'
   END)
WHERE id IN (1,2,3);

일괄 업데이트를 사용하면 업데이트 할 각 행에 대해 하나의 쿼리 대신 하나의 쿼리 만 서버로 보낼 수 있습니다. 케이스에는 WHERE 절에서 WHERE 모든 가능한 매개 변수가 포함되어야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow