메뉴 건너뛰기

Dev tips

DataBase [mysql] 슈퍼 update

taknim 2008.11.25 00:50 조회 수 : 9371 추천:2481

http://www.underroom.com/db_mysql/147SQLER.PE.KR 의 강좌에서 따온 절이다. 참고 할 만한 사항이 정리되어 있다.
유의해야 할 점은 오라클의 SET(COL_1, COL_2) = (SELECT A, B FROM ...... )
이 구문이 MSSQL에는 존재 하지 않는다.
이 구문이 2000 버전까지 지원하지 않음으로 인해서 얼마나 많은 불편을 겪었는지 모른다.
2005 버전은 아직 모르겠다.


테이블이 이미 존재하는 행 데이터를 변경한다.
        UPDATE{table_name | view_name}
                SET[{table_name | view_name}]
                        column_name = expression[, column_name = expression...]
                [WHERE clause]
        - SET
                - 변경할 컬럼과 값을 명시한다.
        - WHERE
                - 변경될 행을 명시한다.
        - UPDATE문이 무결성 제약을 위배한다면 갱신은 이루어지지 않는다.
 
UPDATE discounts
SET discount = discount + .10
WHERE lowqty >= 100


 
다른 테이블의 데이터를 이용하여 갱신할 수 있다.
        UPDATE rable_name [(column_list)]
                SET column_name
                (SELECT column_name
                  FROM table_list
                  WHERE search_conditions)
                WHERE clause
        - 외부 WHERE절은 수정될 행을 결정한다.
        - 내부 WHERE절은 사용될 데이터를 결정한다.

중첩 SELECT 문은 단일 값을 반환하는 경우에만 의미가 있다.
        - 단일 값을 반환하지 않는 경우는 계산 함수를 사용해야 한다
        UPDATE rable_name [(column_list)]
                SET column_name
                (SELECT column_name
                  FROM table_list
                  WHERE search_conditions)
                WHERE clause
        - 외부 WHERE절은 수정될 행을 결정한다.
        - 내부 WHERE절은 사용될 데이터를 결정한다.

중첩 SELECT 문은 단일 값을 반환하는 경우에만 의미가 있다.
        - 단일 값을 반환하지 않는 경우는 계산 함수를 사용해야 한다.
 
UPDATE titles
SET price = price * 2
WHERE pub_id IN
(SELECT pub_id
FROM publishers
WHERE pub_name = 'New Moon Books')


 
단일 update문은 같은 행을 두 번 이상 갱신하지 않는다.
        - 갱신중 발생하는 로그 양을 최소화하기 위해서
 
중첩되는 SELECT 문의 FROM절에 유의해야 한다.
        - UPDATE의 대상 테이블이 FROM절에 나타나는 경우에 원하지 않는 동작을 할 수 있다.

번호 제목 글쓴이 날짜 조회 수
293 Implement Oracle's rownum using mysql taknim 2009.01.08 10789
292 오라클의 rownum 처럼 쓸수 있는 mysql 명령어가 있나요 taknim 2009.01.08 9797
291 PHP5 에서 mysql password, old_password 구현 taknim 2009.01.07 12890
290 Include 파일은 부모 디렉터리를 표시하기 위해 '..'를 사용할 수 없습니다. 와 같은 오류 발생 taknim 2009.01.06 9898
289 MySQL CSV 파일 import taknim 2008.12.30 11760
288 USB 메모리의 파일 시스템 FAT32를 NTFS로 변환하는 방법 taknim 2008.12.23 10198
287 윈도우 XP 한 폴더에 저장할 수 있는 파일의 최대 갯수? taknim 2008.12.23 12221
286 [출처] [TIP] BEEP SOUND 에 따른 에러확인하기....... taknim 2008.12.22 8164
285 윈도우XP 속도를 빠르게 하는 Tip 총정리(21개) taknim 2008.12.21 7356
284 MySQL에서 Sleep 프로세스 죽이기 taknim 2008.12.11 11735
283 [Shell]Mysql processlist 지켜 보기 [1] taknim 2008.12.11 9892
282 dtd 체크하는 스크립트 taknim 2008.12.06 10681
281 echo 와 print / include 와 require taknim 2008.12.03 10681
280 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16248
279 PHP 새로 컴파일 없이 추가 모듈 설치 taknim 2008.11.27 11960
» [mysql] 슈퍼 update taknim 2008.11.25 9371
277 오라클에서 varchar2(4000) 데이타 넣기 taknim 2008.11.25 9631
276 [오라클] 슈퍼 updateoracle taknim 2008.11.25 9915
275 보안을 위한 php.ini 설정 [1] taknim 2008.11.12 9685
274 웹 서버 보안을 위한 php.ini 설정팁 taknim 2008.11.12 9339