본문으로 이동

Update (SQL)

위키백과, 우리 모두의 백과사전.
Badbread (토론 | 기여)님의 2011년 3월 23일 (수) 14:56 판 (새 문서: == Update (SQL) / en:Update (SQL) == 구조화 질의어에서 '''UPDATE''' 문은 테이블에서 하나 이상의 레코드를 바꿉니...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

구조화 질의어에서 UPDATE 문은 테이블에서 하나 이상의 레코드를 바꿉니다. 모든 행을 변경해야 되는 경우도 조건절을 사용하여 하위 집합을 선택할 수 있습니다.

UPDATE 문은 아래의 구문을 따릅니다:[1]

UPDATE table_name SET column_name = value [, column_name = value ...] [WHERE condition]

UPDATE가 성공적으로 이루어진경우, 사용자는 반드시 데이터 조작 특권 동작 (UPDATE 특권동작)을 반드시 테이블이나 컬럼에서 수행해야하고 업데이트된 값은 제약 조건에 충돌하지 않아야 합니다. 그 예를 들면 고유 키,고유 인덱스, CHECK 제약 조건, 그리고 NOT NULL 제약 조건 등이 있습니다.

어떤 데이터베이스 시스템들은 예로 PostgreSQL를 들자면, FROM 절이 존재할 때, 기본적으로 대상 테이블이 fromlist에 응답되는 테이블로 조인합니다. 각각의 출력한 행의 조인은 대상 테이블의 업데이트 작동을 의미합니다. FROM를 쓸 때 생성된 최대 한 개의 각각의 출력 행이 조인되었는지 확인해야 합니다. 다시 말해서, 대상 행은 다른 테이블에 한 개 이상의 행을 다른 테이블로부터 조인할 수 없습니다. 만약 그럴 경우 오직 하나의 행만 대상 테이블에 조인에 사용합니다. 그런 후, 오직 하나의 조인된 행은 대상 행의 업데이트에 사용합니다. 그러나 어떤 행을 썼는 지 예측하기는 어렵습니다. [2]

이 불확정성의 이유는 다른 테이블을 좀 더 안전한 서브셀렉트 범위에서만 참조하고, 그럼에도 불구하고 종종 읽기가 좀 더 어렵고 조인이 좀 더 느려지기 때문입니다.

예제

T 테이블 중 C2 컬럼 값이 "a"인 모든 행에서 C1 컬럼을 1로 바꿉니다.

UPDATE T SET C1 = 1 WHERE C2 = 'a'

T 테이블 중 C2 컬럼 값이 "a"인 모든 행에서 C1 컬럼을 9로, C3 컬럼을 4로 바꿉니다.

UPDATE T SET C1 = 9, C3 = 4 WHERE C2 = 'a'

C2 컬럼 값이 "a"이면 C1 컬럼을 1 증가시킵니다.

UPDATE T SET C1 = C1 + 1 WHERE C2 = 'a'

C2 컬럼 값이 "a"이면 C1 컬럼 값을 "text" 문자열로 프리펜드합니다.

UPDATE T SET C1 = 'text' || C1 WHERE C2 = 'a'

C2 컬럼 값을 C4 컬럼 값이 0인 T2 테이블의 C3 컬럼 값의 서브 목록에서 찾아질 때만 T1 테이블의 C1 컬럼 값을 2로 바꿉니다.

UPDATE T1
SET    C1 = 2
WHERE  C2 IN ( SELECT C3
               FROM   T2
               WHERE  C4 = 0)

또한 여러 컬럼을 하나의 UPDATE 문으로 업데이트할 수 있습니다:

UPDATE T SET C1 = 1, C2 = 2

조건절과 JOIN문 또한 섞어쓸 수 있습니다:

UPDATE T SET A = 1 WHERE C1 = 1 AND C2 = 2
UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a
JOIN classification c
ON a.articleID = c.articleID
WHERE c.classID = 1

또는 오라클 시스템에서 (여기서는 classification.articleID로 인덱스한 것를 가정함)

UPDATE
(
  SELECT *
    FROM articles
    JOIN classification
      ON articles.articleID = classification.articleID
   WHERE classification.classID = 1
)
SET [updated_column] = updatevalue

참조

틀:구조화 질의어