[MariaDB] 9. DML

JIWON·2025년 5월 12일

MariaDB

목록 보기
10/13
post-thumbnail

DML

이론에서는 SELECT, INSERT, DELETE, UPDATE 4가지를 DML로 보지만,
실무에서는 SELECT 를 DQL(Data Query Language)로 구분한다.

조회 (SELECT) 과 수정 (INSERT,DELETE,UPDATE)을 같이하는 것은 효율이 떨어진다. 또 동시 수정은 하면 안된다. 따라서 조회(Nosql)와 수정(rdbms)을 구분하는 것이다.

1. 데이터 삽입

1) INSERT

-- 기본형식
INSERT INTO 테이블이름(컬럼목록) VALUES(값나열);

데이터 삽입

-- tcity 테이블 구조 확인
desc tcity;

-- 하나의 데이터 삽입
INSERT INTO tCity(name,area,popu,metro,region) Value('제주',1,10,'y','제주');

-- 다른 방법(컬럼 목록 생략) 
INSERT INTO tCity Value('제주',1,10,'y','제주');

모든 컬럼에 값을 대입할 때는 컬럼 목록을 생략하고 values에 순서대로 값을 나열해도 된다.

2) 확장 INSERT

: 여러개의 데이터를 한꺼번에 삽입하는 것

  • Values 다음에 여러개의 괄호를 나열하면 된다.

여러개 데이터 동시 삽입

truncate table tcity; -- 테이블의 모든 데이터 삭제

-- 여러 개 데이터 동시 삽입
INSERT INTO tCity (name, area, popu, metro, region) VALUES
('서울',605,974,'y','경기'),
('부산',765,342,'y','경상'),
('오산',42,21,'n','경기'),
('청주',940,83,'n','충청'),
('전주',205,65,'n','전라'),
('순천',910,27,'n','전라'),
('춘천',1116,27,'n','강원'),
('홍천',1819,7,'n','강원');

샘플데이터를 만들 때 사용하고 실제로는 잘 사용하지 않을 것이다.

3) INSERT ~ SELECT

: 다른 테이블로부터 조회한 목록을 삽입

INSERT INTO 테이블 이름(컬럼목록)
SELECT 컬럼 목록
FROM 원본테이블

tCity 테이블에서 조회한 데이터를 tStaff 테이블에 삽입

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

4) CREATE ~ SELECT

새로운 테이블을 만들어 조회한 데이터를 삽입

CREATE TABLE 테이블이름 AS
SELECT 구문;

구조만 복사하고자 하는 경우에는 WHERE 절에 거짓인 조건을 기술하면 된다.

예시

--  dept 테이블의 모든 데이터를 복사해서 새로운 테이블 생성
create table deptcopy as
select * from dept;

-- emp 테이블의 구조만 복사
create table empcopy as
select * from emp where 0=1;

5) 조건부 삽입

INGNORE

여러개의 INSERT 구문을 수행할 때 INSERT와 INTO 사이에 IGNORE을 추가하면 에러가 발생하더라도 다음 스크립트를 수행한다

-- 테이블 생성
create table memberTBL(SELECT userID, name, addr FROM usertbl limit 3);

-- 제약조건 추가
ALTER TABLE MEMBERTBL ADD CONSTRAINT pk_memberTBL primary key(userid);

INSERT INTO memberTBL VALUES('karina', '카리나', '수원' );
INSERT INTO memberTBL VALUES('aeri', '지젤', '서울' );
SELECT * FROM memberTBL;

-- 기본키 중복 안되기 때문에 에러지만 수행은 가능
INSERT IGNORE INTO memberTBL VALUES('karina', '카리나', '수원' );
INSERT IGNORE INTO memberTBL VALUES('aeri', '지젤', '서울' );
SELECT * FROM memberTBL;

2. 데이터 삭제

DELETE FROM 테이블이름 [WHERE 조건];

조건이 없으면 모든 데이터를 삭제한다.

-- 이름이 부산인 데이터 삭제
DELETE FROM tCity
where name = '부산';

-- 모든 데이터 삭제
DELETE FROM tCity;

ROLLBACK

작업취소 명령어

rollback;
  • 데이터 삭제한 것은 rollback 불가

3. 데이터 수정

UPDATE 테이블이름
SET 필드이름 = 새로운 값
[WHERE 조건];

예시

-- tCity 테이블에서 name이 서울인 데이터의 popu는 1000으로 region은 충청으로 수정
UPDATE tCity
SET popu = 1000, region = '충청'
where name = '서울';

4. 연습문제

  1. dept 테이블에서 deptno가 20인 데이터 loc를 deptno가 40인 데이터의 loc로 수정
UPDATE DEPT
SET LOC = (SELECT LOC FROM DEPT WHERE DEPTNO = 20)
WHERE DEPTNO = 40;

  1. EMP 테이블에서 DNAME이 SALES인 데이터를 전부삭제, DNAME은 DEPT 테이블에 존재, EMP 테이블의 DEPTNO와 DEPT 테이블의 DEPTNO가 동일한 의미를 갖는 컬럼
DELET FROM EMP 
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES');

0개의 댓글