db/MySQL

[MySQL] INSERT

잘할수있을거야 2022. 8. 8. 17:19

INSERT INTO 테이블명 (컬럼1,컬럼2...) VALUES (값1,값2...);

//모든 컬럼을 타이핑 하기 힘든 경우 컬럼리스트 생략가능
INSERT INTO 테이블 VALUES (첫컬럼값, 값2, 값3 ...마지막 컬럼값);

DEFAULT 키워드

 

테이블의 컬럼에 기본값이 설정되어 있다면 INSERT문 사용시 DEFAULT 키워드를 사용하여 기본값으로 INSERT가 가능

 

CREATE TABLE test(col1 INT DEFAULT 1);
INSERT INTO test(col1) VALUES(DEFAULT);
SELECT col1 FROM test;


 

기본값이 설정되어있지 않고 NOT NULL제약이 걸려있지 않은 컬럼은

INSERT시 컬럼을 생략하면 DEFAULT값이 없지만 NULL값으로 채워진다.

CREATE TABLE test(col1 INT DEFAULT 1, col2 INT);
INSERT INTO test(col1) VALUES(DEFAULT);
SELECT col1, col2 FROM test;

 

DESCRIBE test;


컬럼에 기본값이 설정되어 있지않았어도 INSERT시 DEFAULT를 키워드를 사용할 수 있고 이 경우 NULL로 채워진다.

CREATE TABLE test(col1 INT DEFAULT 1, col2 INT);
INSERT INTO test(col1) VALUES(DEFAULT);
INSERT INTO test(col1, col2) VALUE(DEFAULT, DEFAULT);
SELECT col1, col2 FROM test;


 

NOT NULL 제약이 존재하는 컬럼은 INSERT시 생략할 수 없고 명시적으로 값을 넣어줘야 한다.

CREATE TABLE test(col1 INT DEFAULT 1, col2 INT NOT null);
INSERT INTO test(col1) VALUES(DEFAULT);

null이 아닌 것에 해당하는 기본값 설정이 없는 컬럼이라는 에러를 내준다.


INSERT INTO 테이블1(컬럼리스트)  SELECT 컬럼리스트 FROM 테이블2;

 

CREATE TABLE src_table(src_col1 int, src_col2 INT);
INSERT INTO src_table(src_col1, src_col2) VALUES(1,1),(2,2),(3,3),(4,4),(5,5);

CREATE TABLE des_table(des_col1 INT, des_col2 INT);

INSERT INTO des_table(des_col1,des_col2) select src_col1, src_col2 from src_table;
-- INSERT INTO des_table select src_col1, src_col2 from src_table; 과 동일
-- INSERT INTO des_table select * from src_table; 과 동일

-- 복사 결과 확인
SELECT des_col1, des_col2 FROM des_table;