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
길이를 초과하는 데이터 삽입 시 오류가 발생할 수 있습니다. deptno
와 dname
열에만 데이터를 삽입합니다.insert into dept1 (deptno, dname, loc) values (30, '총무부', '서울');
insert into dept1 (deptno, loc, dname) values (40, '서울', '기획부');
-- bulky insert
insert into dept1 values ( 11, '개발부', '서울' ), ( 12, '개발부', '서울' ), ( 13, '개발부', '서울' );
VALUES
절에 여러 개의 데이터 세트를 추가합니다.-- 연습용 테이블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
값이 자동으로 삽입됩니다. 테이블 구조에 따라 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
제약조건이 설정된 열은 반드시 값을 가져야 합니다. 테이블 내의 특정 열 값을 수정하거나 여러 열을 동시에 변경할 수 있는 SQL 명령어입니다.
WHERE
절을 생략하면 테이블의 모든 행이 업데이트됩니다.WHERE
절을 사용하면 특정 조건을 만족하는 행만 선택적으로 업데이트할 수 있습니다.UPDATE 테이블명
SET 컬럼명1 = 값1, 컬럼명2 = 값2, ...
WHERE 조건;
UPDATE
문에서 WHERE
절을 생략하면, 테이블의 모든 행이 수정됩니다. 예를 들어, dept1
테이블의 loc
열 값을 모두 '대전'으로 변경하려면 다음과 같이 작성합니다.
UPDATE dept1
SET loc = '대전';
특정 조건을 설정하여 일부 행만 선택적으로 수정할 수 있습니다. 예를 들어, deptno
가 21인 행의 loc
값을 '부산'으로 변경하려면 다음과 같이 작성합니다.
UPDATE dept1
SET loc = '부산'
WHERE deptno = 21;
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 문은 테이블의 특정 데이터를 삭제하는 데 사용되며, WHERE
절을 통해 조건을 설정할 수 있습니다. WHERE
절을 사용하지 않을 경우 테이블의 모든 데이터가 삭제되므로, 선택적인 데이터 삭제가 필요할 때는 반드시 WHERE
조건을 지정하는 것이 좋습니다.
DELETE FROM 테이블명
WHERE 조건;
WHERE
절을 생략하면 테이블의 모든 행을 삭제합니다.
DELETE FROM emp1;
emp1
테이블의 모든 데이터가 삭제됩니다. 테이블 구조는 유지되며, 행 데이터만 제거됩니다. WHERE
절을 사용하여 특정 조건을 만족하는 일부 행만 삭제할 수 있습니다. 예를 들어, deptno
가 30인 행을 삭제하려면 다음과 같이 작성합니다.
DELETE FROM emp1
WHERE deptno = 30;
emp1
테이블에서 deptno
가 30인 행만 삭제됩니다.WHERE
절을 잘못 설정하면 의도하지 않은 데이터가 삭제될 수 있으므로 조건을 신중히 설정해야 합니다.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;