[DB] DML(Data Manipulation Language)

의혁·2024년 6월 25일

[DB] 데이터베이스

목록 보기
4/6
post-thumbnail

DML(Data Manipulation Language)

💡 DML이란?
: 데이터 조작어로 입력된 레코드(row)를 조회,수정,삭제하는 등의 역할을 하는 언어
: INSERT , UPDATE, DELETE , (SELECT)

1. INSERT

💡 새로운 행을 추가하는 경우에 사용

💡 INSERT INTO 컬럼명(생략가능) FROM 컬럼값

<코드>

-- INSERT문으로 삽입
INSERT
  INTO tbl_menu
(
  menu_name
, menu_price
, category_code
, orderable_status
)
VALUES
(
  '초콜릿죽'
 , 6500
 , 7
 , 'Y'
 );
 
 -- SELECT문으로 확인 (내림차순)
SELECT * FROM tbl_menu ORDER BY 1 DESC;

<실행결과>

  • 새로운 행을 추가하는 구문
  • 테이블의 행의 수가 증가
  • 컬럼이 너무 많은 경우 컬럼을 가로로 한줄에 연결 가능
  • INSERT INTO문에 들어가는 컬럼 명은 생략이 가능
  • NULLABLE(NULL 허용) 컬럼이나 AUTO_INCREMENT가 있는 컬림을 제외하고, INSERT 사용가능 (default 속성 존재 : default값 들어감)

1-1. MULTI INSERT

💡 새로운 행을 여래 개를 한번에 추가하는 경우에 사용

<코드>

-- MULTI INSERT문으로 다중추가
INSERT
  INTO tbl_menu
VALUES
 ( NULL, '참치맛아이스크림', 1700, 12, 'Y'),
 ( NULL, '참치맛아이스크림', 1500, 11, 'Y'),
 ( NULL, '참치맛아이스크림', 2500, 8, 'Y');
 
 -- SELECT문으로 확인(내림차순)
 SELECT * FROM tbl_menu ORDER BY 1 DESC;
 

<실행결과>

  • 여러 개의 컬럼을 한번에 넣을 수 있음
  • BUT, 컬럼에 속하는 모든 열 값을 전부 넣어줘야 함
  • 컬럼을 명시하면, INSERT시 데이터의 순서 바꾸기 가능



2.UPDATE

💡 행의 부분을 수정(UPDATE)하는 경우에 사용

💡 UPDATE 테이블명 SET 수정사항 WHERE 선택 조건

<코드>

-- 수정하려는 컬럼 값 확인
SELECT
	   *
  FROM tbl_menu
 where menu_name = '소시지맛커피';

<실행결과>


<코드>

-- UPDATE 진행(조건문으로 지정해줘야함)
UPDATE tbl_menu
   SET category_code = 7
 WHERE menu_code = 25;

-- 조회
 SELECT * FROM tbl_menu WHERE menu_code = 25; 

<실행결과>

  • 테이블에 기록된 컬럼 값을 수정하는 구문
  • 수정하는 과정임으로 전체 행 갯수 변화 X
  • 수정할 컬럼 값을 지정하는 과정 필요
  • MYSQL은 Oracle과 달리 UPDATE나 DELETE시 자기 자신 테이블의 데이터 사용시 1093 에러 발생

<코드>

-- subquery를 활용한 update
UPDATE tbl_menu
   SET category_code = 6
-- 단일 행이여서 = 을 사용 , 다중 행이면 IN 사용 필요
 WHERE menu_code = (SELECT menu_code
 							 FROM tbl_menu
 							WHERE menu_name = '소시지맛커피');
                            
-- 내림차순으로 정렬 후 조회
SELECT * FROM tbl_menu ORDER BY 1 DESC;

<실행결과>

  • 수정할 컬럼 값을 찾아내기 위해서 서브쿼리를 사용 (단일 행 이면 = , 다중 행이면 IN)
  • UPDATE는 실제 원본데이터를 수정하지는 X(보여주기용) -> ROLL BACK을 통해서 다시 돌아가기 가능 + TRASNACTIONCOMMIT과정을 통해서 원본 수정 가능


3. DELETE

💡 특정 행을 삭제할 경우에 사용

💡 DELETE A FROM B ROLLBACK
(SET autocommit = OFF 설정 : 원본 삭제 X , SET autocommit = ON 설정 : 원본 삭제 O)

<코드>

SELECT * FROM tbl_menu;
DELETE
  FROM tbl_menu;
ROLLBACK;

-- MYSQL 또는 MARIADB는 autocommit이 기본적으로 'on'이라
-- insert, update, delete시에 베이스 테이블에(메모리에) 바로 반영된다.
-- 다시 살리고 싶다면 autocommit을 꺼 주어야한다.
SET autocommit = OFF;
  • 테이블의 행을 삭제하는 구문
  • 테이블의 행의 갯수가 줄어듬
  • MariaDB는 기존 autocommit = ON으로 설정되어 있어서, 베이스 테이블에 반영 됨.
  • autocommit = OFF로 설정하면 ROLLBACK을 통해서 돌이키기 가능

<코드>

-- 삭제하기 전 테이블 확인
SELECT * FROM tbl_menu ORDER BY menu_price;

<실행결과>

<코드>

DELETE
  FROM tbl_menu
 ORDER BY menu_price -- 메뉴 가격 기준 오름차순
 LIMIT 2;				-- 정렬된 첫행붙터 두개의 행에 해당

-- 조회
SELECT * FROM tbl_menu ORDER BY menu_price;

<실행결과>

  • 위와 같이 조건을 통해서 삭제할 부분만 삭제 가능( where절을 통해서도 가능)

<코드>

DELETE FROM tbl_menu;

-- (경고문구를 안 띄우고 싶다면)
DELETE FROM tbl_menu WHERE 1 = 1;
  • 테이블의 전체 데이터 삭제시 아래처럼 쓰면 경고문 X



4. REPLACE

💡 다른 행으로 덮어씌우는 경우에 사용

💡 REPLACE INTO(생략가능) 테이블 명 VALUES 테이블의 컬럼 변경값

<코드>

-- Replace문 실행 전 확인
SELECT * FROM tbl_menu WHERE menu_code = 17;

<실행결과>

<코드>

---  Replace문 실행
REPLACE
  INTO tbl_menu		-- INTO는 생략 가능
VALUES
(
  17
, '참기름소주'
, 5000
, 10
, 'Y'
);

--실행 후 결과 확인
SELECT * FROM tbl_menu WHERE menu_code = 17;

<실행결과>

  • INSERT시 PRIMARY KEY와 UNIQUE KEY가 충돌하게 될때 중복된 데이터를 덮어씌우는데 많이 사용
  • 기존 데이터를 덮어씌워서 변화시키는 구조


5. TRANSACTION

💡 데이터베이스의 일련의 작업을 하는 단위

💡START TRANSACTION ~~ COMMIT (수정한 부분 확정 - 원본 데이터 수정 O)
💡START TRANSACTION ~~ ROLLBACK (commit하기 전부분으로 되돌아감 - 원본 데이터 수정 X)

<코드>

-- autocommit 비활성화
SET autocommit = 0;
SET autocommit = OFF;

-- autocommit 활성화
SET autocommit = 1;
SET autocommit= ON;
  • MYSQL과 MariaDB는 자동 커밋 설정이 되어있어 따로 설정해주지 않으면 ROLLBACK 되어 버림

<코드>

-- 실행전 
SELECT * FROM tbl_menu;

<실행결과>

<코드>

-- autocommit 비할성화
SET autocommit = OFF;

--단위 시작
START TRANSACTION;

INSERT
  INTO tbl_menu
 VALUES
 (
   NULL, '바나나해장국', 8500
 , 4, 'Y'
 );
 
 UPDATE tbl_menu
   SET menu_name = '수정된 메뉴'
 WHERE menu_code = 5;
 
 -- 하나씩 주석처리 후 실행
 ROLLBACK;
 COMMIT;

<실행결과>
-- ROLL BACK
ROLL BACK 후 (auto_commit을 설정 하지 않으면 다시 돌아감) COMMIT 후(commit 이후에는 RollBack이 작동하지 X)

  • SET autocommmit = OFF를 설정하면 , commit을 하지 않으면 ROLLBACK을 하면 다시 돌아감
  • commit을 진행하면 원본 테이블에 적용되어 ROLLBACK을 하여도 돌아가지 않음

<코드>

-- autocommit 활성화
SET autocommit = ON;

--단위 시작
START TRANSACTION;

INSERT
  INTO tbl_menu
 VALUES
 (
   NULL, '바나나해장국', 8500
 , 4, 'Y'
 );
 
 UPDATE tbl_menu
   SET menu_name = '수정된 메뉴'
 WHERE menu_code = 5;

<실행결과>

  • MySQL이나 MariaDB는 자동 커밋이 되어, SET autocommit = ON을 설정하거나, 아무것도 설정하지 않으면 자동으로 COMMIT되어서 ROLLBACK이 작동하지 않음

profile
매일매일 차근차근 나아가보는 개발일기

0개의 댓글