# INSERT

테이블에 데이터 넣고 싶으면&#x20;

DBMS 프로그램에서 직접 클릭과 타이핑으로 넣을 수 있는데

대량 or 자동으로 넣고 싶으면 당연히 SQL 짜서 넣습니다.&#x20;

새로 테이블 만들고 시작해봅시다.&#x20;





### **연습용 테이블 만들기**



TEST 스키마에 temp 테이블을 만들어봅시다.

**id, 상품명, 가격** 이렇게 3개의 컬럼을 만들어주면 됩니다.&#x20;

id는 Auto increment, Primary key 제약도 넣어주세요.

물론 배운 사람처럼 SQL 써서 만들어보십시오.



```sql
CREATE TABLE temp (
  id NUMBER(38,0) GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  상품명 varchar(100),
  가격 NUMBER(38,0)
) 
```





### **데이터 집어넣고 싶으면 INSERT**



주구장창 SELECT 문법만 썼는데 이번엔 새로운 INSERT 문법입니다.



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

테이블의 모든 컬럼명과 거기 넣을 모든 값을 차례로 적어주면 됩니다.&#x20;





```sql
INSERT INTO temp (상품명, 가격) VALUES ('김치', 500) ;
```

이렇게 적으면



| id | 상품명 | 가격  |
| -- | --- | --- |
| 1  | 김치  | 500 |

이렇게 데이터가 저장됩니다.

AUTO INCREMENT 제약이 부여된 컬럼은 직접 값을 넣으려고 하면 오류가 발생합니다.



(참고)

\- 일부 컬럼에만 데이터 저장 시 빈 곳은 NULL이 들어갑니다.

\- 컬럼에 NOT NULL 제약조건이 있으면 당연히 NULL 넣기 불가능

\- NULL 대신 빈문자 '' 아니면 0 입력해두는 사람들도 있습니다.

다만 Oracle에선 '' 빈문자는 자동으로 NULL로 바꿔줍니다.





### **다른 테이블에 있던 데이터 복사도 가능**



INSERT INTO 문법의 VALUES () 자리에 SELECT 문을 집어넣을 수 있는데&#x20;

그럼 SELECT로 찾은 행들을 집어넣어줍니다.



```sql
INSERT INTO temp (상품명, 가격) SELECT 상품명, 가격 FROM item;
```

이렇게 하면 item 테이블에 있던 데이터가 temp 에 삽입됩니다.



\- 당연히 SELECT 문법 뒤에 WHERE, JOIN 이런거 전부 사용가능&#x20;

\- 테이블에 심각한 작업할 때 잠깐 테이블을 백업하는 용도로도 사용해도 괜찮습니다.&#x20;





### **테이블 복사문법 2**



```sql
CREATE TABLE temp2 AS SELECT * FROM temp;
```

이렇게 써도 테이블복사가 가능합니다.&#x20;

얘는 테이블을 아예 새로 생성해준다는게 차이점입니다.&#x20;





### **삽입 수정 삭제는 위험함**&#x20;



뒤에 가서 수정, 삭제 문법도 배워볼텐데&#x20;

삽입, 수정, 삭제는 매우 위험한 작업입니다.&#x20;

회사에 직원이 많아지면 (특히 신입...) 높은 확률로 데이터베이스에서 문제가 높은확률로 발생합니다.

삽입, 수정, 삭제 아무나 할 수 있게 만들면 나중에 큰일날 수 있습니다.&#x20;

&#x20;

우리는 맨 처음 설치시 만들었던 test 계정에 dba 권한을 주고 사용하고 있는데

이걸로 로그인하면 모든 작업을 마음대로 할 수 있는데

이거 말고 권한을 축소시킨 계정을 하나 새로 만들 수 있습니다.&#x20;
