Data Analyst/SQL

SQL - The INSERT Statement, The UPDATE Statement, COMMIT and ROLLBACK

hmm06 2024. 8. 28. 11:07

The INSERT Statement (데이터 삽입)

INSERT 문법: 데이터를 테이블에 삽입하기 위해 사용됩니다.

-- 사용 방법
INSERT INTO table_name (column_1, column_2, …, column_n)
VALUES (value_1, value_2, …, value_n);

/*
column들의 순서와 value값들의 순서는 서로 일치해야한다!!
*/
insert into employees
(
	emp_no,
    birth_date,
    first_name,
    last_name,
    gender,
    hire_date
) values
(
	999901, -- 정수형 또한 따옴표 안에 작성은 가능하나 좋은 방법은 아니다.
    '1986-04-21',
    'John',
    'Smith',
    'M',
    '2011-01-01'
);

insert into 문 작성 시 주의사항 : column순서와 넣으려는 value값들의 순서가 일치해야 합니다!!

 

Inserting Data INTO a New Table (새 테이블에 데이터 삽입)

이번에 보여줄 insert절은 테이블을 모두 가져오는 방법이다.(제가 이해한 것은 copy라 생각됩니다.)

/*
사용방법 및 table_2에 table_1의 모든 데이터를 복사 붙여넣기
*/
INSERT INTO table_2 (column_1, column_2, …, column_n)
SELECT column_1, column_2, …, column_n
FROM table_1
WHERE condition;

/*
departments와 departments_dup의 컬럼은 동일하다.
departments의 모든 데이터들을 departments_dup테이블로 모두 복사 붙여넣기
*/
INSERT INTO departments_dup
(
    dept_no,
    dept_name
)
SELECT 
	*
FROM 
	departments;

주의사항 : 컬럼명은 달라도 되나, 컬럼 개수는 같아야 합니다.

 

The UPDATE Statement (데이터 업데이트)

UPDATE 문법: 테이블의 기존 데이터를 업데이트할 때 사용됩니다.(기존 데이터 수정)

/*
사용 방법
*/
UPDATE table_name
SET column_1 = value_1, column_2 = value_2 …
WHERE conditions;

/*
기존에 emp_no의 값을 아래의 데이터들로 변경하였다.
*/
UPDATE employees 
SET 
    first_name = 'Stella',
    last_name = 'Parkinson',
    birth_date = '1990-12-31',
    gender = 'F'
WHERE
    emp_no = 999909;

 

주의 사항 : 특정 조건을 만족하는 데이터를 업데이트할 수 있으며, WHERE 조건을 생략하면 테이블의 모든 데이터가 업데이트됩니다​.

 

COMMIT and ROLLBACK (트랜잭션 제어 언어)

COMMIT: 트랜잭션에서 수행한 변경 사항을 데이터베이스에 영구적으로 저장합니다.

 

ROLLBACK: 마지막 COMMIT 이전 상태로 데이터를 되돌립니다.

(마지막 시점으로 옮기는 것이 가능하지 ROLLBACK을 두 번 쓴다 하여 두 번째 이전 COMMIT 상태로 돌아가는 것은 아닙니다.)

 

COMMIT은 데이터베이스 상태를 저장하고, ROLLBACK은 마지막 저장 시점으로 되돌릴 수 있어 데이터 변경 관리에 유용합니다​.

SELECT 
    *
FROM
    departments_dup
ORDER BY dept_no;

commit;

-- WHERE절이 존재하지 않아 테이블 내의 모든 데이터 값이 변경된 것을 확인 할 수 있다.
UPDATE departments_dup 
SET 
    dept_no = 'd011',
    dept_name = 'Quality Control';

-- commit 전으로 되돌리는 역할을 하여 업데이트 하기 전으로 돌아갔음을 확인 할 수 있다.    
ROLLBACK; 

COMMIT;
728x90