업데이트(SQL)
Update (SQL)SQL UPDATE 문은 테이블에 있는 하나 이상의 레코드의 데이터를 변경한다.모든 행을 업데이트하거나 조건을 사용하여 하위 집합을 선택할 수 있다.null
그UPDATE
문장의 형식은 다음과 같다.[1]
UPDATE
table_name column_name = 값 [, column_name = 값 ...]WHERE
[조건]
를 위해UPDATE
성공하려면 사용자에게 데이터 조작 권한이 있어야 함(UPDATE
테이블 또는 열의 권한 및 업데이트된 값이 모든 적용 가능한 제약 조건(예: 기본 키, 고유 인덱스, 제약 조건 및 제약 조건)과 충돌하지 않아야 한다.null
Postgre와 같은 일부 데이터베이스에서는SQL, FROM 절이 있을 때 본질적으로 일어나는 일은 대상 테이블이 fromlist에 언급된 테이블에 결합되어 있고, 조인의 각 출력 행은 대상 테이블의 업데이트 작업을 나타낸다.FROM을 사용할 때는 조인이 수정할 각 행에 대해 최대 한 개의 출력 행을 생성하는지 확인해야 한다.즉, 대상 행은 다른 테이블에서 둘 이상의 행에 결합하면 안 된다.그럴 경우, 조인 행 중 하나만 대상 행을 업데이트하는 데 사용되지만, 어떤 행이 사용될지는 쉽게 예측할 수 없다.[2]null
이러한 불규칙성 때문에 하위 선택 항목 내에서만 다른 표를 참조하는 것이 안전하지만 조인트를 사용하는 것보다 읽기 어렵고 느리기도 하다.null
MySQL은 ANSI 표준을 준수하지 않는다.[3]null
예
C2열의 값이 "a"인 행에서만 표 T의 C1열의 값을 1로 설정한다.null
갱신하다 T 세트 C1 = 1 어디에 C2 = 'a'
표 T에서 C2의 값이 "a"인 모든 행에 대해 C1열의 값을 9로, C3의 값을 4로 설정한다.null
갱신하다 T 세트 C1 = 9, C3 = 4 어디에 C2 = 'a'
C2열의 값이 "a"인 경우 C1열의 값을 1씩 증가시킨다.null
갱신하다 T 세트 C1 = C1 + 1 어디에 C2 = 'a'
C2 열의 값이 "a"인 경우 C1 열의 값을 문자열 "text"로 앞에 붙이십시오.null
갱신하다 T 세트 C1 = '텍스트' C1 어디에 C2 = 'a'
표 T1의 C1 열 값을 2로 설정하고, C2 열 값이 표 T2의 C3 열 값 하위 목록에서 C4 열이 0이 되도록 한다.
갱신하다 T1 세트 C1 = 2 어디에 C2 인 ( 선택 C3 From T2 어디에 C4 = 0)
하나의 업데이트 문에서 여러 열을 업데이트할 수도 있다.
갱신하다 T 세트 C1 = 1, C2 = 2
복잡한 조건과 JOIN도 가능하다.
갱신하다 T 세트 A = 1 어디에 C1 = 1 AND C2 = 2
일부 데이터베이스는 FROM 절의 비표준 사용을 허용한다.
갱신하다 a 세트 a.[updated_column] = 업데이트 가치 From 기사들 a 가입하다 분류 c 켜기 a.기사ID = c.기사ID 어디에 c.classID = 1
또는 Oracle 시스템(분류에 대한 인덱스가 있다고 가정)에서아티클ID:
갱신하다 ( 선택 * From 기사들 가입하다 분류 켜기 기사들.기사ID = 분류.기사ID 어디에 분류.classID = 1 ) 세트 [updated_column] = 업데이트 가치
테이블 이름이 긴 경우:
갱신하다 마이메인테이블 AS a 세트 a.엘나메 = 스미스 어디에 a.피플ID = 1235
잠재적 문제
- 할로윈 문제를 보라.그것은 어떤 종류의 것이 가능하다.
UPDATE
다음이 될 때 무한 루프(infinite loop)가 되는 문장WHERE
조항과 하나 또는 그 이상SET
절은 서로 얽힌 지수를 활용할 수 있다.