UPDATE

설명

UPDATE 문을 사용하면 대상 테이블에 저장된 레코드의 컬럼 값을 새로운 값으로 업데이트할 수 있다. SET 절에는 업데이트할 컬럼 이름과 새로운 값을 명시하며, WHERE 절에는 업데이트할 레코드를 추출하기 위한 조건을 명시한다. LIMIT 절에 업데이트할 레코드 수를 명시할 수 있다. ORDER BY 절을 명시하면 해당 컬럼의 순서로 레코드를 업데이트한다. ORDER BY 절에 의한 업데이트는 트리거의 실행 순서나 잠금 순서를 유지하고자 할 때 유용하게 이용할 수 있다.

구문

UPDATE table_name SET column_name = {expr | DEFAULT} [, column_name = {expr | DEFAULT]...]

    [WHERE search_condition]

    [ORDER BY {col_name | expr}]

    [LIMIT row_count]

참고 사항

UPDATE 문에서 한 컬럼은 한 번만 갱신할 수 있다.

예제

--creating a new table having all records copied from a_tbl1

CREATE TABLE a_tbl5 AS SELECT * FROM a_tbl1;

SELECT * FROM a_tbl5 WHERE name IS NULL;

           id  name                  phone

=========================================================

         NULL  NULL                  '000-0000'

            4  NULL                  '000-0000'

            5  NULL                  '000-0000'

            7  NULL                  '777-7777'

 

UPDATE a_tbl5 SET name='yyy', phone='999-9999' WHERE name IS NULL LIMIT 3;

SELECT * FROM a_tbl5;

           id  name                  phone

=========================================================

         NULL  'yyy'                 '999-9999'

            1  'aaa'                 '000-0000'

            2  'bbb'                 '000-0000'

            3  'ccc'                 '333-3333'

            4  'yyy'                 '999-9999'

            5  'yyy'                 '999-9999'

            6  'eee'                 '000-0000'

            7  NULL                  '777-7777'

 

-- using triggers, that the order in which the rows are updated is modified by the ORDER BY clause.

 

CREATE TABLE t (i INT,d INT);

CREATE TRIGGER trigger1 BEFORE UPDATE ON t IF new.i < 10 EXECUTE PRINT 'trigger1 executed';

CREATE TRIGGER trigger2 BEFORE UPDATE ON t IF new.i > 10 EXECUTE PRINT 'trigger2 executed';

INSERT INTO t VALUES (15,1),(8,0),(11,2),(16,1), (6,0),(1311,3),(3,0);

UPDATE t  SET i = i + 1 WHERE 1 = 1;

 

trigger2 executed

trigger1 executed

trigger2 executed

trigger2 executed

trigger1 executed

trigger2 executed

trigger1 executed

 

TRUNCATE TABLE t;

INSERT INTO t VALUES (15,1),(8,0),(11,2),(16,1), (6,0),(1311,3),(3,0);

UPDATE t SET i = i + 1 WHERE 1 = 1  ORDER BY i;

 

trigger1 executed

trigger1 executed

trigger1 executed

trigger2 executed

trigger2 executed

trigger2 executed

trigger2 executed