윈 토토

UPDATE — 테이블 행 윈 토토

시놉시스

[ [ 재귀 ] 사용with_query[, ...] ]
윈 토토 [만]테이블_이름[ * ] [ [ AS ]별칭]
     설정컬럼_이름 = { 표현| 기본값  |
          (컬럼_이름[, ...] ) = [ 행 ] (표현| 기본값  [, ...] ) |
          (컬럼_이름 [, ...] ) = ( 하위 SELECT)
         [, ...]
    [ 보낸사람from_item[, ...] ]
    [어디에서조건| 현재는 어디입니까?cursor_name]
    [ 반환 중 [ WITH (  이전 | 새  ASoutput_alias [, ...] ) ]
                { * | 출력_표현[ [ 그대로 ]output_name ] } [, ...] ]

설명

윈 토토조건을 만족하는 모든 행의 지정된 열 값을 변경합니다. 수정할 열만 언급하면 됩니다.SET절; 명시적으로 수정되지 않은 열은 이전 값을 유지합니다.

데이터베이스의 다른 테이블에 포함된 정보를 사용하여 테이블을 수정하는 두 가지 방법이 있습니다: 하위 선택을 사용하거나 추가 테이블을 지정하는 것입니다.발신절. 어떤 기술이 더 적절한지는 특정 상황에 따라 다릅니다.

선택사항돌아오는 중절 원인윈 토토실제로 윈 토토된 각 행을 기반으로 값을 계산하고 반환합니다. 테이블의 열 및/또는에 언급된 다른 테이블의 열을 사용하는 모든 표현식발신, 계산할 수 있습니다. 기본적으로 테이블 열의 새(윈 토토 후) 값이 사용되지만 이전(윈 토토 전) 값을 요청할 수도 있습니다. 의 구문돌아오는 중목록은 출력 목록의 목록과 동일합니다.선택.

당신은 다음을 가지고 있어야 합니다윈 토토테이블에 대한 권한 또는 적어도 윈 토토되도록 나열된 열에 대한 권한입니다. 또한 다음이 있어야 합니다.선택값이 읽혀지는 모든 열에 대한 권한표현또는조건.

매개변수

with_query

위드절을 사용하면 이름으로 참조할 수 있는 하나 이상의 하위 쿼리를 지정할 수 있습니다.윈 토토질의. 참조PostgreSQL : 문서 : 17 : 7.8. 스포츠 토토 사이트와 함께 (공통 테이블 표현식)그리고선택자세한 내용은.

테이블_이름

윈 토토할 테이블의 이름(선택적으로 스키마 한정). 만일이 테이블 이름 앞에 지정되어 있으며, 일치하는 행은 명명된 테이블에서만 윈 토토됩니다. 만일이 지정되지 않으면 명명된 테이블에서 상속되는 모든 테이블에서 일치하는 행도 윈 토토됩니다. 선택적으로,*테이블 이름 뒤에 지정하여 하위 테이블이 포함되어 있음을 명시적으로 나타낼 수 있습니다.

별칭

대상 테이블의 대체 이름입니다. 별칭이 제공되면 테이블의 실제 이름이 완전히 숨겨집니다. 예를 들어, 주어진foo AS f 윈 토토, 나머지윈 토토문은 이 테이블을 다음과 같이 참조해야 합니다.f아님foo.

열_이름

이름이 지정된 테이블의 열 이름테이블_이름. 필요한 경우 하위 필드 이름이나 배열 첨자로 열 이름을 한정할 수 있습니다. 대상 열의 사양에 테이블 이름을 포함하지 마세요. 예:UPDATE table_name SET table_name.col = 1잘못되었습니다.

표현

열에 할당할 표현식입니다. 표현식은 이 열과 테이블에 있는 다른 열의 이전 값을 사용할 수 있습니다.

기본값

열을 기본값으로 설정합니다(특정 기본 표현식이 할당되지 않은 경우 NULL이 됩니다). ID 열은 연관된 시퀀스에 의해 생성된 새 값으로 설정됩니다. 생성된 열의 경우 이를 지정하는 것이 허용되지만 생성 표현식에서 열을 계산하는 일반적인 동작만 지정합니다.

하위 SELECT

A 선택앞의 괄호로 묶인 열 목록에 나열된 만큼의 출력 열을 생성하는 하위 쿼리입니다. 하위 쿼리는 실행 시 행을 1개 이상 생성해서는 안 됩니다. 하나의 행이 생성되면 해당 열 값이 대상 열에 할당됩니다. 행이 생성되지 않으면 대상 열에 NULL 값이 할당됩니다. 하위 쿼리는 윈 토토 중인 테이블의 현재 행의 이전 값을 참조할 수 있습니다.

from_item

다른 테이블의 열을 테이블에 표시할 수 있는 테이블 표현식어디조건 및 윈 토토 표현식. 이는 다음과 동일한 구문을 사용합니다.발신a의 절선택문장; 예를 들어 테이블 이름의 별칭을 지정할 수 있습니다. 대상 테이블을 다음과 같이 반복하지 마십시오.from_item자체 조인을 의도하지 않은 경우(이 경우 별칭과 함께 표시되어야 합니다.from_item).

조건

유형의 값을 반환하는 표현식부울. 이 표현식이 반환되는 행만윈 토토됩니다.

cursor_name

에서 사용할 커서의 이름현재 위치조건. 윈 토토할 행은 이 커서에서 가장 최근에 가져온 행입니다. 커서는에서 비그룹화 쿼리여야 합니다.윈 토토의 대상 테이블입니다. 참고하세요현재 위치부울 조건과 함께 지정할 수 없습니다. 참조선언커서 사용에 대한 자세한 내용은현재 위치.

output_alias

다음에 대한 선택적 대체 이름오래된또는신규돌아오는 중목록.

기본적으로 대상 테이블의 이전 값은 쓰기를 통해 반환될 수 있습니다.오래된.열_이름또는오래됨.*, 다음과 같이 쓰면 새 값이 반환될 수 있습니다.신규.열_이름또는신규.*. 별칭이 제공되면 이러한 이름은 숨겨지며 별칭을 사용하여 이전 행이나 새 행을 참조해야 합니다. 예를 들어(이전 AS o, 신규 AS n) o.*, n.*로 반환.

출력_표현

다음에 의해 계산되고 반환되는 표현식윈 토토19292_19392테이블_이름또는 다음에 나열된 테이블발신. 쓰기*모든 열을 반환합니다.

열 이름 또는*다음을 사용하여 한정될 수 있습니다.오래된또는신규또는 해당output_aliasfor오래된또는신규, 이전 값이나 새 값이 반환되도록 합니다. 규정되지 않은 열 이름 또는*또는 열 이름 또는*대상 테이블 이름 또는 별칭을 사용하여 한정하면 새 값이 반환됩니다.

출력_이름

반환된 열에 사용할 이름입니다.

출력

성공적으로 완료되면,윈 토토명령은 다음 형식의 명령 태그를 반환합니다.

윈 토토개수

개수은 값이 변경되지 않은 일치하는 행을 포함하여 윈 토토된 행 수입니다. 숫자는와 일치하는 행 수보다 작을 수 있습니다.조건윈 토토가 다음에 의해 억제되었을 때윈 토토 전트리거. 만일개수이 0이면 쿼리로 윈 토토된 행이 없습니다(오류로 간주되지 않음).

만약에윈 토토명령에 다음이 포함됨돌아오는 중절, 결과는 a선택에 정의된 열과 값을 포함하는 문돌아오는 중목록, 명령으로 윈 토토된 행에 대해 계산됩니다.

참고

발신절이 존재하면 본질적으로 발생하는 일은 대상 테이블이 다음에서 언급된 테이블에 조인된다는 것입니다.from_item목록이며 조인의 각 출력 행은 대상 테이블에 대한 윈 토토 작업을 나타냅니다. 사용시발신조인이 수정될 각 행에 대해 최대 하나의 출력 행을 생성하는지 확인해야 합니다. 즉, 대상 행은 다른 테이블의 둘 이상의 행에 조인되어서는 안 됩니다. 그렇다면 조인 행 중 하나만 사용하여 대상 행을 윈 토토하지만 어느 행이 사용될지는 쉽게 예측할 수 없습니다.

이러한 불확실성 때문에 하위 선택 내에서만 다른 테이블을 참조하는 것이 더 안전합니다. 하지만 종종 조인을 사용하는 것보다 읽기 어렵고 속도가 느립니다.

분할된 테이블의 경우 행을 윈 토토하면 포함된 파티션의 파티션 제약 조건을 더 이상 충족하지 못할 수 있습니다. 이 경우 파티션 트리에 이 행이 파티션 제약 조건을 충족하는 다른 파티션이 있으면 행이 해당 파티션으로 이동됩니다. 해당 파티션이 없으면 오류가 발생합니다. 뒤에서 행 이동은 실제로 다음과 같습니다.삭제그리고삽입작업.

동시 발생 가능성이 있습니다윈 토토또는삭제이동되는 행에서 직렬화 실패 오류가 발생합니다. 세션 1이 다음을 수행하고 있다고 가정합니다.윈 토토파티션 키에 대해 동시에 이 행이 표시되는 동시 세션 2는 다음을 수행합니다.윈 토토또는삭제이 행에 대한 작업입니다. 이 경우 세션 2의윈 토토또는삭제행 이동을 감지하고 직렬화 실패 오류를 발생시킵니다(항상 SQLSTATE 코드 '40001'과 함께 반환됨). 이런 일이 발생하면 애플리케이션은 트랜잭션을 다시 시도할 수 있습니다. 테이블이 분할되지 않거나 행 이동이 없는 일반적인 경우 세션 2는 새로 윈 토토된 행을 식별하고 다음 작업을 수행합니다.윈 토토/삭제이 새로운 행 버전에서.

행은 로컬 파티션에서 외부 테이블 파티션으로 이동할 수 있지만(외부 데이터 래퍼가 튜플 라우팅을 지원하는 경우) 외부 테이블 파티션에서 다른 파티션으로 이동할 수는 없습니다.

외래 키가 언급된 조상과 동일하지 않은 소스 파티션의 조상을 직접 참조하는 것으로 발견되면 한 파티션에서 다른 파티션으로 행을 이동하려는 시도가 실패합니다.윈 토토질의합니다.

단어 변경드라마극적열에종류테이블의영화:

UPDATE 영화 SET 종류 = '드라마틱' WHERE 종류 = '드라마';

테이블의 한 행에서 온도 항목을 조정하고 강수량을 기본값으로 재설정날씨:

UPDATE 날씨 설정 temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
  WHERE 도시 = '샌프란시스코' AND 날짜 = '2003-07-03';

동일한 작업을 수행하고 윈 토토된 항목과 이전 강수량 값을 반환합니다:

UPDATE 날씨 설정 temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
  WHERE 도시 = '샌프란시스코' AND 날짜 = '2003-07-03'
  temp_lo, temp_hi, prcp, old.prcp AS old_prcp 반환;

동일한 윈 토토를 수행하려면 대체 열 목록 구문을 사용하십시오:

윈 토토 날씨 설정 (temp_lo, temp_hi, prcp) = (temp_lo+1, temp_lo+15, DEFAULT)
  WHERE 도시 = '샌프란시스코' AND 날짜 = '2003-07-03';

다음을 사용하여 Acme Corporation의 계정을 관리하는 영업사원의 판매 횟수를 증가시킵니다.발신절 구문:

UPDATE 직원 SET sales_count = sales_count + 1 FROM 계정
  WHERE account.name = 'Acme Corporation'
  AND 직원.ID = account.sales_person;

동일한 작업을 수행합니다. 하위 선택을 사용하여어디에서절:

직원 윈 토토 SET sales_count = sales_count + 1 WHERE id =
  (이름 = 'Acme Corporation'인 계정에서 sales_person 선택);

현재 할당된 영업사원과 일치하도록 계정 테이블의 연락처 이름을 윈 토토하세요.

계정 설정 윈 토토 (contact_first_name, contact_last_name) =
    (직원에서 이름, 성 선택)
     어디에 직원.ID = account.sales_person);

조인을 사용하면 비슷한 결과를 얻을 수 있습니다:

계정 윈 토토 SET contact_first_name = first_name,
                    contact_last_name = 성_이름
  직원으로부터 직원.ID = account.sales_person;

그러나 다음과 같은 경우 두 번째 쿼리에서 예상치 못한 결과가 나타날 수 있습니다.직원.id은 고유 키가 아니지만 첫 번째 쿼리는 여러 개가 있는 경우 오류가 발생하도록 보장됩니다.id일치합니다. 또한 특정 항목과 일치하는 항목이 없는 경우계정.판매_사람항목, 첫 번째 쿼리는 해당 이름 필드를 NULL로 설정하지만 두 번째 쿼리는 해당 행을 전혀 윈 토토하지 않습니다.

현재 데이터와 일치하도록 요약 테이블의 통계를 윈 토토합니다.

윈 토토 요약 s SET (sum_x, sum_y, avg_x, avg_y) =
    (SELECT sum(x), sum(y), avg(x), avg(y) FROM 데이터 d
     d.group_id = s.group_id);

재고 수량과 함께 새 재고 항목을 삽입하려고 시도합니다. 항목이 이미 존재하는 경우 대신 기존 항목의 재고 수를 윈 토토하십시오. 전체 트랜잭션을 실패하지 않고 이를 수행하려면 저장점을 사용하십시오.

시작;
-- 기타 작업
세이브포인트 sp1;
INSERT INTO wines VALUES('Chateau Lafite 2003', '24');
-- 고유 키 위반으로 인해 위의 작업이 실패했다고 가정합니다.
-- 이제 다음 명령을 실행합니다.
sp1로 롤백합니다.
윈 토토 와인 세트 재고 = 재고 + 24 WHERE 와인 이름 = 'Chateau Lafite 2003';
-- 다른 작업을 계속하고 결국에는
커밋;

변경종류테이블의 열영화커서가 있는 행에서c_films현재 위치:

윈 토토 영화 세트 종류 = 현재 c_films가 있는 곳에서 '드라마틱';

많은 행에 영향을 미치는 윈 토토는 테이블 팽창, 복제 지연 증가, 잠금 경합 증가 등 시스템 성능에 부정적인 영향을 미칠 수 있습니다. 이러한 상황에서는 작은 배치로 작업을 수행하는 것이 합리적일 수 있습니다.진공28862_28923제한윈 토토, a를 사용하여 비슷한 효과를 얻을 수 있습니다.PostgreSQL : 문서 : 17 : 7.8. 스포츠 토토 사이트와 함께 (공통 테이블 표현식)및 자체 조인. 표준으로PostgreSQL테이블 액세스 방법, 시스템 열의 자체 조인ctid매우 효율적입니다:

AS 초과_max_retries(
  w.ctid FROM work_item AS w 선택
    WHERE w.status = '활성' AND w.num_retries  10
    w.retry_timestamp로 주문
    윈 토토를 위해
    5000개 제한
)
UPDATE work_item SET 상태 = '실패'
  FROM 초과된_max_retries AS emr
  work_item.ctid = emr.ctid;

이 명령은 윈 토토할 행이 더 이상 남지 않을 때까지 반복되어야 합니다. 의 사용주문 기준절을 사용하면 명령이 윈 토토할 행의 우선순위를 지정할 수 있습니다. 또한 동일한 순서를 사용하는 경우 다른 윈 토토 작업과의 교착 상태를 방지할 수도 있습니다. 잠금 경합이 문제가 되는 경우 다음을 수행하세요.건너뛰기 잠김다음에 추가할 수 있습니다.CTE여러 명령이 동일한 행을 윈 토토하는 것을 방지합니다. 그러나 최종적으로윈 토토없이건너뛰기 잠김또는제한일치하는 행이 간과되지 않았는지 확인하는 데 필요합니다.

호환성

이 명령은 다음을 준수합니다.SQL표준, 다음을 제외하고발신그리고돌아오는 중절은PostgreSQL확장 기능 및 사용 기능함께함께윈 토토.

일부 다른 데이터베이스 시스템은 다음을 제공합니다.발신대상 테이블이 다시 나열되는 옵션발신. 그렇지 않아요포스트그레SQL해석발신. 이 확장 프로그램을 사용하는 애플리케이션을 포팅할 때는 주의하세요.

표준에 따르면, 괄호로 묶인 대상 열 이름의 하위 목록에 대한 소스 값은 올바른 열 수를 산출하는 행 값 표현식일 수 있습니다.포스트그레SQL소스 값만 허용행 생성자또는 하위-선택. 개별 열의 윈 토토된 값은 다음과 같이 지정할 수 있습니다.기본값행 생성자의 경우, 하위 내부는 아님선택.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.