[Day 11 | DB] DML : INSERT, UPDATE, DELETE

y♡ding·2024년 10월 28일
0

데브코스 TIL

목록 보기
73/163

INSERT

INSERT 문은 MariaDB에서 테이블에 새로운 데이터를 추가하는 명령어입니다. 이 명령어는 주로 단일 행 또는 여러 행의 데이터를 삽입할 때 사용하며, 필요한 경우 특정 열에만 데이터를 추가하거나 다른 테이블에서 데이터를 복사해 삽입하는 등 다양한 방식으로 사용할 수 있습니다.

기본 문법

INSERT INTO 테이블명 VALUES (1,2, ...);
INSERT INTO 테이블명 (컬럼명 ...) VALUES (1,2, ...);
구문설명
INSERT INTO 테이블 VALUES (값1, 값2, ...);테이블의 모든 열에 데이터를 삽입합니다.
INSERT INTO 테이블 (열1, 열2) VALUES (값1, 값2);특정 열에만 데이터를 삽입합니다.
INSERT INTO 테이블 VALUES (값1, 값2), (값3, 값4);여러 행을 한 번에 삽입합니다.
INSERT INTO 테이블 SELECT * FROM 다른_테이블 WHERE 조건;다른 테이블에서 데이터를 선택하여 삽입합니다.

연습용 테이블 dept1 생성: sample.dept 테이블의 구조를 복사하여 데이터는 없이 dept1 테이블을 만듭니다.

-- 연습용 테이블 생성
create table dept1
as select * from sample.dept
where 1 != 1;

중복 데이터 삽입 및 유효성 검토


insert into dept1 values (10, '개발부', '서울'); 

insert into dept1 values (10, '개발부', '서울');

insert into dept1 values (10, '개발부', '서울');

insert into dept1 values (10, '개발부', '서울서울서울서울서울서울서울서울서울');

insert into dept1 values (20, '연구부', '부산');
  • 데이터 삽입: dept1에 모든 열을 대상으로 데이터를 삽입합니다.
  • 중복 데이터 삽입 시도: deptno 값이 동일한 데이터(중복)를 여러 번 삽입할 수 있습니다.
  • VARCHAR 길이를 초과하는 데이터 삽입 시 오류가 발생할 수 있습니다.

특정 열 삽입: deptnodname 열에만 데이터를 삽입합니다.

insert into dept1 (deptno, dname, loc) values (30, '총무부', '서울');

insert into dept1 (deptno, loc, dname) values (40, '서울', '기획부'); 
  • 열 순서 변경하여 데이터 삽입: 열의 순서를 지정하고 데이터 삽입을 진행할 수 있습니다.

여러 행을 동시에 삽입 (Bulk Insert)

-- bulky insert

insert into dept1 values ( 11, '개발부', '서울' ), ( 12, '개발부', '서울' ), ( 13, '개발부', '서울' );
  • 여러 행 동시에 삽입: 한 번에 여러 행을 삽입할 때는 VALUES 절에 여러 개의 데이터 세트를 추가합니다.

테이블 구조 복제 후 데이터 삽입 (CREATE TABLE LIKE 및 INSERT INTO ... SELECT)

-- 연습용 테이블2 생성
create table dept2 like sample.dept;

desc dept2;
select * from dept2;

insert into dept2 select * from sample.dept;
  • 테이블 간 데이터 복사: INSERT INTO ... SELECT 문을 사용하여 다른 테이블의 데이터를 복사해 삽입할 수 있습니다.

수업코드

MariaDB [test1]> create table dept2 like sample.dept;
Query OK, 0 rows affected (0.080 sec)

MariaDB [test1]> desc dept2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(2)      | NO   | PRI | NULL    |       |
| dname  | varchar(14) | YES  |     | NULL    |       |
| loc    | varchar(13) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.006 sec)

MariaDB [test1]> insert into dept2 select * from sample.dept;
Query OK, 4 rows affected (0.002 sec)
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [test1]> select * from dept2;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.000 sec)

MariaDB [test1]> 

주의사항

* 데이터 타입: 각 열에 맞는 데이터 타입을 제공해야 합니다. 예를 들어, 숫자형 열에 문자열을 넣으면 오류가 발생할 수 있습니다.

  • NULL 값: 특정 열에 데이터를 입력하지 않으면 기본값이나 NULL 값이 자동으로 삽입됩니다. 테이블 구조에 따라 NOT NULL 제약조건이 설정된 열은 반드시 값을 제공해야 합니다.
  • 중복 데이터: 기본 키 또는 유니크 키가 설정된 열에는 중복 값이 삽입되지 않으므로, 중복 데이터 삽입 시 오류가 발생할 수 있습니다.

NOT NULL 제약조건

NULL 값 허용 안 함: NOT NULL 제약조건이 설정된 열에는 NULL 값이 들어갈 수 없습니다. 데이터를 삽입할 때 해당 열에 반드시 유효한 값이 입력되어야 합니다.

+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(2)      | NO   |     | NULL    |       | <- Not Null
| dname  | varchar(14) | YES  |     | NULL    |       |
| loc    | varchar(13) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

MariaDB [test1]> INSERT INTO dept1 (dname, loc) VALUES ('총무부', '서울');
ERROR 1364 (HY000): Field 'deptno' doesn't have a default value
  • deptno 열에 값을 제공하지 않았기 때문에 NULL 값이 들어가게 되며, 오류가 발생합니다. NOT NULL 제약조건이 설정된 열은 반드시 값을 가져야 합니다.

UPDATE

테이블 내의 특정 열 값을 수정하거나 여러 열을 동시에 변경할 수 있는 SQL 명령어입니다.

  • 전체 행 수정: WHERE 절을 생략하면 테이블의 모든 행이 업데이트됩니다.
  • 부분 행 수정: WHERE 절을 사용하면 특정 조건을 만족하는 행만 선택적으로 업데이트할 수 있습니다.
UPDATE 테이블명 
SET 컬럼명1 =1, 컬럼명2 =2, ... 
WHERE 조건;

(1) 모든 행의 특정 열을 동일한 값으로 수정

UPDATE 문에서 WHERE 절을 생략하면, 테이블의 모든 행이 수정됩니다. 예를 들어, dept1 테이블의 loc 열 값을 모두 '대전'으로 변경하려면 다음과 같이 작성합니다.

UPDATE dept1 
SET loc = '대전';

(2) 특정 조건에 맞는 행만 수정

특정 조건을 설정하여 일부 행만 선택적으로 수정할 수 있습니다. 예를 들어, deptno가 21인 행의 loc 값을 '부산'으로 변경하려면 다음과 같이 작성합니다.

UPDATE dept1 
SET loc = '부산' 
WHERE deptno = 21;

(3) 여러 열 동시에 수정하기

SET 절에 여러 열을 지정하여 여러 열의 값을 동시에 수정할 수 있습니다. 예를 들어, deptno가 30인 행에서 dname을 '총무부'로, loc를 '서울'로 변경하고 싶다면 다음과 같이 작성합니다.

UPDATE dept1 
SET dname = '총무부', loc = '서울' 
WHERE deptno = 30;
[문제] 급여가 1000에서 2000 사이인 사원들의 부서번호를 30으로 변경.
 update emp1 set deptno=30 where sal between 1000 and 2000; 

DELETE

DELETE 문은 테이블의 특정 데이터를 삭제하는 데 사용되며, WHERE 절을 통해 조건을 설정할 수 있습니다. WHERE 절을 사용하지 않을 경우 테이블의 모든 데이터가 삭제되므로, 선택적인 데이터 삭제가 필요할 때는 반드시 WHERE 조건을 지정하는 것이 좋습니다.

DELETE FROM 테이블명
WHERE 조건;

DELETE 문 사용 예제

(1) 모든 행 삭제

WHERE 절을 생략하면 테이블의 모든 행을 삭제합니다.

DELETE FROM emp1;
  • emp1 테이블의 모든 데이터가 삭제됩니다. 테이블 구조는 유지되며, 행 데이터만 제거됩니다.

(2) 특정 조건을 만족하는 행 삭제

WHERE 절을 사용하여 특정 조건을 만족하는 일부 행만 삭제할 수 있습니다. 예를 들어, deptno가 30인 행을 삭제하려면 다음과 같이 작성합니다.

DELETE FROM emp1
WHERE deptno = 30;
  • emp1 테이블에서 deptno가 30인 행만 삭제됩니다.
  • 주의: WHERE 절을 잘못 설정하면 의도하지 않은 데이터가 삭제될 수 있으므로 조건을 신중히 설정해야 합니다.

(3) 특정 범위의 데이터 삭제

WHERE 절에 범위를 지정하여 특정 범위에 해당하는 데이터를 삭제할 수 있습니다. 예를 들어, 급여가 1000에서 2000 사이인 사원의 데이터를 삭제하려면 다음과 같이 작성합니다.

DELETE FROM emp1
WHERE sal BETWEEN 1000 AND 2000;

한글 입력이 안될 때

-- 전체 테이블의 CHARACTER SET 변경 (dept1 예시)
ALTER TABLE dept1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 

0개의 댓글

관련 채용 정보