본 포스트는 개인 스터디에 대한 정리 및 기록의 용도로써, 오개념이 존재 할 수 있습니다. 글은 상시 수정되며, 지적사항에 대해서 검토 후 수정하겠습니다.
본 포스트는 한국데이터진흥원 발간, SQL 전문가 가이드 2013Edition을 참고하였습니다.
지금까지 DDL을 사용하여 테이블단위에서 조작하는방법을 공부했는데, 이제부터 DML을 이용하여 테이블 속 행・열(튜플)들을 조작하는 방법을 공부하고 정리해보려고 한다. 먼저 DML을 공부하면서 느끼는 점은, 이 쿼리문을 열심히 공부해야겠다고 생각했다. 데이터베이스 공부하는 목적이 아마 원하는 데이터들을 데이터베이스에서 효율적이게 뽑아와서 사용하는거라고 생각하는데, 이 DML이 그런 역할을 하는거 같다.
DML(Data Manipulation Language)
- 뜻 풀이 그대로 번역하면 데이터 조작어라는 뜻이다.
- 자료들을 입맛에 맞게 입력 수정 삭제 조회하는데 사용된다.
- INSERT 문
- 테이블에 데이터를 입력하는 방법이다.
- 원하는 테이블 속 원하는 열들(colum)에 입력한다( 유형 1)
- 원하는 테이블 전체에 값을 넣어준다. (유형 2)
현재 PLAYER 테이블이다. 이 테이블에 새로운 선수를 추가하고 싶을때 INSERT문을 사용한다.
-- INSERT문의 형식
INSERT INTO 테이블명( col_name1, col_name2, col_name3, col_name4)
VALUES ( col_name1에 넣을 데이터, col_name2에 넣을 데이터, col_name3에 넣을 데이터, col_name4에 넣을 데이터 );
--
-- 박지성 선수에 대한 데이터 추가하기 ( 유형 1 )
INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO)
VALUES ('2002007', '박지성', 'K07', 'MF', 178, 73, 7);
넣어줄 열에 추가할 데이터를 1:1 매핑 되게 넣어주어야 한다. 문자는 ' ' 로 숫자일시에는 그냥 사용한다. 칼럼을 따로 지정해주지 않은 곳들에 대해서는 NULL 값이 입력 되었다.
유형2 에 대한 적용을 해보자면 모든 열에 대해 값을 넣어줄거면 따로 열들을 지정해줄 필요가 없다.
-- 이청용 선수 추가 ( 유형 2 )
INSERT INTO PLAYER
VALUES ('2002010', '이청용', 'K07', '', 'BlueDragon', '2002', 'MF', '17‘ , NULL, NULL, '1', 180, 69);
박지성 선수를 추가할때와 차이점을 찾아냈다면 정말 눈썰미가 좋다. 바로 NULL 값에 대한 처리인데, E_PLAYER_NAME에 열에는 NULL 이 아닌 ' '의 공백 문자가 추가 됐다. 이는 엄연히 NULL가 다르며 이런식으로 표현 할수 있다는 사실을 알아 두어야 한다.
INSERT문을 SELECT와 결합하여 사용 할 수 있는데, 아직 SELECT에 관한 이야기를 정리하지 않았기 때문에 이렇게 할수도 있다는 사실만을 염두해 두고 넘어가자.
INSERT INTO BLUE_DRAGON_TEAM1
SELECT PLAYER_ID, PLAYER_NAME, BACK_NO
FROM PLAYER
WHERE TEAM_ID = 'K07';
간단히 설명하자면, PLAYER 테이블에 TEAM_ID가 K07인 선수들중 PLAYER_ID, PLAYER_NAME, BACK_NO 만을 뽑아와 BLUE_DRAGON_TEAM1 테이블에 추가하라는 말이다. 주의할점은 BLUE_DRAGON_TEAM1가 미리 존재해야 한다. 이경우 CTAS를 사용하면 테이블이 미리 생성되고 튜플들이 삽입된다.
- DELETE 문
- 테이블을 삭제하기 위해 사용한다.
- 테이블의 스키마는 그대로 있지만, 튜플들만 삭제된다. 이는 TRUNCATE TABLE과 의미상은 같지만 로그를 DELETE문은 로그를 저장하기 때문에 전체 데이터를 지울경우는 부하가 생겨 권하지 않는다.
- WHERE절과 함께 사용하여 튜플만 지우기도 한다.
DELETE문을 사용하여 값들을 지워 보겠다.
-- 사용법, WHERE 은 사용해도 되고 안해도 됨
DELETE FROM 적용할테이블;
[WHERE 조건]
--
--박지성선수 튜플 지우기 PLAYER_ID 는 PK
DELETE FROM PLAYER
WHERE PLAYER_ID = '2002007';
이청용선수를 지우고 싶다. 그러나 PLAYER_ID는 기억이 안나고, 이름밖에 모른다. 이름을 통해서 지워보자
DELETE FROM PLAYER
WHERE PLAYER_NAME = '이청용';
safe_updates 모드 뭐라고 하면서 지워지지 않았다. 왜그런걸까? MySQL에서는 사용자가 실수로 여러개의 데이터를 지우는것을 방지하기 위해 PK가 아닌 열에 대해서는 Safe_updates 모드를 0으로 변경하고 지워줘야한다. 이말은 즉슨 2개이상의 데이터가 지워지는거를 방지해주는거다.
SET sql_safe_updates=0; -- OFF
DELETE FROM PLAYER
WHERE PLAYER_NAME = '이청용';
SET sql_safe_updates=1; -- ON
이말은 PLAYER 테이블의 모든 튜플을 지워줄때도 safe_updates=0을 해야한다.
SET sql_safe_updates=0; -- 기본값은 1이다.
DELETE FROM PLAYER;
-UPDATE 문
정보를 수정해줄때 사용한다.
-- 사용법
UPDATE 테이블명
SET 바꿀 값
WHERE 검색조건;
--
UPDATE PLAYER
SET BACK_NO = 99
WHERE PLAYER_ID = '2000062';
오늘은 DML에서 INSERT와 DELETE 그리고 UPDATE를 정리하며 공부해봤다. 확실히 이렇게 하나하나 해보면서 기록하니까 기억에는 잘남는데 시간이 너무 오래걸린다. 뭐 좋은 방법이 없을까 늘 고민이다. 그래도 만드느게 재밌다. 다음에는 SELECT 절에 대해서 정리할건데 양이 많기때문에 몇개로 나눠서 정리해볼 생각이다.
'• 데이터베이스(DB) > __SQL__' 카테고리의 다른 글
#5 [DML] MySQL에서 WHERE 조건식 사용해보기 IN,LIKE,IS NULL,BETWEEN (0) | 2021.05.25 |
---|---|
#4 [DML] MySQL에서 SELECT 사용해보기 (0) | 2021.05.25 |
#2[DDL]_ MySQL 을 이용하여 제약조건 사용 및 DROP TABLE, ALTER TABLE 정리 (0) | 2021.05.20 |
#1[DDL]_ MySQL 테이블 개념과 CREATE TABLE (0) | 2021.05.18 |
#0_SQL 기본 및 명령어 종류 (0) | 2021.05.16 |