hyeonga_code

Database_46_데이터 조작과 트랜잭션_DML 데이터 조작어 UPDATE 본문

Oracle Database

Database_46_데이터 조작과 트랜잭션_DML 데이터 조작어 UPDATE

hyeonga 2023. 8. 4. 05:59
반응형

-- DML_Data Management Language 데이터 조작어   


    -- UPDATE
        /*
        UPDATE table
        SET column=value, ...
        [WHERE condition];
        */
        -- 이미 저장되어 있는 테이블의 데이터를 수정합니다.
        -- 필요한 경우 한 번에 여러 열 또는 여러 행을 갱신합니다.
        -- 주의사항
            -- WHERE 절을 생략하는 경우 테이블의 모든 행이 수정됩니다.
            -- WHERE 절의 조건에 해당하는 행이 없는 경우 오류는 발생하지 않고 아무 행도 변경되지 않습니다.

-- 수정할 데이터가 존재하는 지 확인합니다.
SELECT employee_id, last_name, hire_date FROM employees
WHERE employee_id=113;
    /*
    EM_ID   LAST_NAME    SALARY      DP_ID       
    ----------------------------------------------------------
    113            김                    6900           100

    */     

UPDATE employees SET department_id=70, salary=salary*1.1
WHERE employee_id=113;
    /*
    1 행 이(가) 업데이트되었습니다.
    */
    
SELECT * FROM employees
WHERE employee_id=113;
    /*
    EM_ID   LAST_NAME    SALARY      DP_ID       
    ----------------------------------------------------------
    113            김                      7590           70
        -- 다른 창에서 조회하는 경우 변경된 데이터를 확인할 수 없습니다.
    */  
    
-- 다른 창에서 실행합니다.
INSERT INTO sales_reps(id, name, salary, comm, job_id, department_id)
SELECT employee_id, last_name, salary, commission_pct, job_id, department_id
FROM employees
WHERE job_id LIKE '%REP%';
    /*
    4개 행 이(가) 삽입되었습니다.
    */
    
UPDATE sales_reps
SET salary = 8000;
    /*
    4개 행 이(가) 업데이트되었습니다.
    */
SELECT * FROM sales_reps;
    /*
     ID          NAME      SALARY   COMM     JOB_ID     DP_ID        
     ---------------------------------------------------------------------------------
    174         Abel           8000          0.3         SA_REP         80
    176         Taylor        8000          0.2         SA_REP         80
    178         Grant         8000         0.15        SA_REP        ( null ) 
    202         Fay           8000         ( null )      MK_REP         20
    */


    
ROLLBACK;    
    
        -- 서브쿼리로 업데이트할 수 있습니다.
UPDATE employees
SET job_id = ( SELECT job_id
                  FROM employees
                  WHERE employee_id=205),
     salary = ( SELECT salary
                  FROM employees
                  WHERE employee_id=205)
WHERE employee_id=114;
    /*
    1 행 이(가) 업데이트되었습니다.
    */



        -- 행의 갱신 : 무결성 제약 조건의 오류
            -- 무결성 제약 조건의 영향을 받는 레코드를 갱신하면 오류가 반환됩니다.
            -- 무결성 제약 조건은 데이터가 미리 정의된 규칙을 따르도록 보장합니다.
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
    /*
        <오류>----------------------------------------------------------------------------------
        명령의 256 행에서 시작하는 중 오류 발생 -
        UPDATE employees
        SET department_id = 55
        WHERE department_id = 110
        오류 보고 -
        ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found   
        ------------------------------------------------------------------------------------------
    */

반응형