
💡 DML이란?
: 데이터 조작어로 입력된 레코드(row)를 조회,수정,삭제하는 등의 역할을 하는 언어
: INSERT , UPDATE, DELETE , (SELECT)
💡 새로운 행을 추가하는 경우에 사용
💡 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;
<실행결과>

💡 새로운 행을 여래 개를 한번에 추가하는 경우에 사용
<코드>
-- 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;
<실행결과>

💡 행의 부분을 수정(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;
<실행결과>

<코드>
-- 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;
<실행결과>

💡 특정 행을 삭제할 경우에 사용
💡 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;
<코드>
-- 삭제하기 전 테이블 확인
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;
<실행결과>

<코드>
DELETE FROM tbl_menu;
-- (경고문구를 안 띄우고 싶다면)
DELETE FROM tbl_menu WHERE 1 = 1;
💡 다른 행으로 덮어씌우는 경우에 사용
💡 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;
<실행결과>

💡 데이터베이스의 일련의 작업을 하는 단위
💡START TRANSACTION ~~ COMMIT (수정한 부분 확정 - 원본 데이터 수정 O)
💡START TRANSACTION ~~ ROLLBACK (commit하기 전부분으로 되돌아감 - 원본 데이터 수정 X)

<코드>
-- autocommit 비활성화
SET autocommit = 0;
SET autocommit = OFF;
-- autocommit 활성화
SET autocommit = 1;
SET autocommit= ON;
<코드>
-- 실행전
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)
<코드>
-- 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;
<실행결과>