티스토리 뷰

SQL

SQL 뽀개기 - 5 | 삽입, 삭제, 갱신

세댕댕이 2021. 7. 23. 22:51

1. INSERT

INSERT INTO 테이블 (필드목록) VALUES (값목록)

// 1. 1대1 대응
INSERT INTO tCity (name, area, popu, metro, region)
VALUES ('서울', 605, 974, 'Y', '경기');

// 2. 모든 필드를 선언순서대로 삽입할 경우 필드목록은 생략해도 된다
INSERT INTO tCity VALUES ('서울', 605, 974, 'Y', '경기')

- 다만 서로 개수와 타입이 꼭 일치해야 한다..

- 그래서 필드 목록을 나열하는 1번 방식이 정석적인 방법이라고 한다.

-> 테이블의 구조 변화에 대한 유연성도 향상되기 때문에 권장.

 

2. COMMIT

- SQL문은 잘못썼다가 파멸을 초래할 수 있기 때문에 곧바로 DB에 손대지 않는다

- 변경된 레코드를 곧바로 적용시키지 않고 외부의 임시 영역에 대기시켜 놓는다

-> 임시 영역의 변경 사항이 이상없다고 판단되면 이를 테이블에 영구 적용하는 것을 "COMMIT"이라고 한다

-> 변경사항을 다시 취소하는 것을 "ROLLBACK"이라고 한다

 

(COMMIT : F11 / ROLLBACK : F12)

 

3. INSERT SELECT

INSERT INTO 대상테이블(필드목록) SELECT 필드목록 FROM 원본테이블

 

- INSERT INTO와 기본 형식은 비슷하지만 필드의 값을 VALUE 절로 지정하지 않고 SELECT 명령으로 다른 테이블에서 읽어온다는 점이 다르다

- SELECT 오른쪽의 필드목록과 왼쪽의 목적지 필드목록은 1:1 대응한다

INSERT INTO tStaff(name, depart, gender, joindate, grade, salary, score)
SELECT name, region, metro, '20210723', '신입', area, popu FROM tCity WHERE region = '경기';

- 조건에 맞는 테이블을 추가로 갖다붙이는 거라 생각하면 된다

 

4. CREATE SELECT

CREATE TABLE 대상테이블 AS SELECT 필드목록 FROM 원본테이블

 

- 테이블을 새로 만들면서 기존 테이블의 일부 필드와 레코드를 가져와 삽입하는 명령.

- 대상 테이블이 미리 존재하고 있으면 안됨 -- 에러남

- 원본을 손상시키지 않고 특수한 작업을 해야할 때, 사본을 만들어야 할 때, 테스트 해볼 때 유용하게 사용

CREATE TABLE tSudo AS SELECT name, area popu FROM tCity WHERE region = '경기';
SELECT * FROM tSudo ORDER BY popu DESC;

CREATE TABLE tStaffHighScore AS SELECT name, salary, score FROM tStaff WHERE score >= 80;
SELECT * FROM tStaffHighScore ORDER BY score DESC;

 

// 모든 필드와 모든 레코드를 다 복사해 똑같은 사본 만들기
CREATE TABLE tStaff_0723 AS SELECT * FROM tStaff;

- 사본은 데이터만 복사할 뿐 기본키나 외래키같은 제약조건까지 복사하지 않는다.

 

5. DELETE

DELETE FROM 테이블 WHERE 조건

 

DELETE FROM tStaffHighScore WHERE name = '서울' OR name = '용인';
DELETE FROM tCity WHERE region = '경기';

- 삭제사실을 임시 영역에 기록하므로 COMMIT만 안했다면 ROLLBACK해서 참사를 막을 수 있다

- COMMIT 하면 되돌릴 수 없다.

- 웬만하면 WHERE절과 같이 써서 조건에 맞는 레코드만 삭제한다..

 

-- DELETE
-- SELECT *
FROM tStaff WHERE grade = '과장';

과 같은 방법을 사용해서 전체 스크립트 실행시 의도치 않은 삭제를 방지하고

조건에 맞는지 확인한 이후 -> 블록으로 DELETE까지 드래그 해서 안전하게 삭제하는 방법도 있다고 한다.

 

6. TRUNCATE

TRUNCATE TABLE 테이블

 

- 테이블을 비운다(삭제 x)

- DELETE는 하나씩 지우고 로그를 남겨 느린 반면 얘는 그냥 싹 비워버리고 로그도 남기지 않아 빠르다

- 로그를 남기지 않으므로 ROLLBACK으로 되돌릴 수 없다

(참고 : 테이블 삭제는 DROP TABLE 테이블)

 

7. UPDATE

UPDATE 테이블 SET 필드=값 [,필드=값 ...] WHERE 조건

 

UPDATE tStaff SET salary = salary * 1.1 WHERE depart = '영업부';
UPDATE tCity SET popu = popu * 2 WHERE name = '오산';

 

'SQL' 카테고리의 다른 글

SQL 뽀개기 - 7 | 모델링  (0) 2021.07.29
SQL 뽀개기 - 6 | 제약조건  (0) 2021.07.24
SQL 뽀개기 - 4 | 데이터 집계  (0) 2021.07.23
SQL 뽀개기 - 3 | SELECT  (0) 2021.07.22
SQL 뽀개기 - 2 | SQL의 종류  (0) 2021.07.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함