본문 바로가기
공부/mysql

Mysql 기본명령어 12 (INSERT)

by signature95 2022. 2. 9.
728x90
반응형

이전 포스트에 이어서 작성하는 내용입니다.

 

2022.02.08 - [공부/mysql] - Mysql 기본명령어 11 (CASE)

 

Mysql 기본명령어 11 (CASE)

이전포스트에 이어서 작성하는 내용입니다. 2022.02.07 - [공부/mysql] - Mysql 기본명령어 10 (날짜 연산) Mysql 기본명령어 10 (날짜 연산) 이전 포스트에 이어서 작성하는 내용입니다. 2022.02.07 - [공부/mysq

signature95.tistory.com

 

데이터베이스 테이블에 행을 추가하는 법은 먼저 INSERT 명령어를 사용합니다.

 

보통 문법은 다음과 같습니다.

 

INSERT INTO table_name VALUES (value1, value2 …)

 

그렇다면 빈 테이블을 하나 가져오도록 하겠습니다.

 

sample41에는 아무런 데이터가 존재하지 않습니다.

물론 필드 값은 존재합니다.

여기서 INSERT를 사용해본다면, 다음과 같은 명령어를 쓸 수 있습니다.

 

INSERT INTO sample41 VALUES(1, 'ABC', '2022-02-09');

출력 해보면, 다음과 같이 입력이 된것을 확인할 수 있습니다.

 

INSERT INT 명령어에서는 행 값에 접근해서 넣어도 되지만, 열 값에 접근해서 추가해도 됩니다.

 

문법은 다음과 같습니다.

 

INSERT INTO table (row1, row2 …) VALUES (value1, value2 …)

 

바로 명령어를 입력해보겠습니다.

 

INSERT INTO sample41 (a, no) VALUES('XYZ', 3);

b열에는 따로 값을 입력하지 않았기 때문에 NULL값이 들어간 것을 확인할 수 있습니다. (Default가 NULL로 설정되어 있음)

 

하지만 만약 여기 no필드에 value를 NULL로 넣게 된다면, 에러가 발생합니다. NOT NULL 제약이 걸려 있기 때문입니다.

 

하지만, a,b컬럼에 NULL을 입력하면 문제없이 입력이 됩니다. NOT NULL제약이 없기 때문이죠.

 

 

이번에는 NULL값이 그대로 입력된 것을 확인할 수 있습니다. 

다시 돌아와서 no 3에 b값은 아무것도 입력하지 않았기에 NULL이 되었는데 그 이유가 Default가 NULL로 설정되어 있기 때문이라고 언급하였습니다.

 

그러면 이번에는 Default에 대해 알아보도록 하겠습니다.

 

먼저 예시 데이터를 불러오겠습니다.

Default 값이 0이 되어 있는 것을 확인할 수 있습니다.

만약 여기 d 필드에 데이터를 넣지 않고 no에만 입력하게 된다면 default가 0이므로 0값이 입력될 것입니다.

 

INSERT INTO sample411 (no, d) VALUES(2, DEFAULT);

 

DEFAULT 값을 입력하라 했더니 0이 입력된 것을 확인할 수 있습니다. 이를 명시적으로 DEFAULT를 지정하는 법이라고 합니다.

 

암묵적으로 DEFAULT를 지정하는 법은 위에서와 같이 no 필드에만 value를 입력하면 DEFAULT가 적용됩니다.

 

마지막으로 실습을 해보겠습니다.

 

INSERT INTO sample411 (no) VALUES(3);

다음은 여기까지 한 내용을 pymysql로 시행해본 파이썬 코드입니다.

 

import pymysql
import pandas as pd

# DESC 명령어로 출력된 데이터에 컬럼명을 붙여서 데이터프레임 형식으로 출력해줍니다.
def describe_table(sql):
    conn = pymysql.connect(host='localhost', user='root', password='password', charset='utf8', database= 'sample')
    cursor = conn.cursor() 
    cursor.execute(sql) 
    desc_data = cursor.fetchall()
    conn.commit() 
    conn.close()
    return pd.DataFrame(desc_data, columns = ['Field', 'Type', 'NULL', 'KEY', 'Default', 'Extra'])

# sql명령어를 입력받아서 출력하는 형태
def sql_command(sql):
    conn = pymysql.connect(host='localhost', user='root', password='password', charset='utf8', database= 'sample')
    cursor = conn.cursor() 
    cursor.execute(sql) 
    data = cursor.fetchall()
    conn.commit() 
    conn.close()
    return pd.DataFrame(data, columns=DESC_table.Field.tolist())
DESC_table = describe_table('desc sample41')
print(DESC_table)

>>>

  Field         Type NULL KEY Default Extra
0    no          int   NO        None      
1     a  varchar(30)  YES        None      
2     b         date  YES        None

 

 

동일한 명령어를 사용하여 sample41에 대한 정보를 가져왔습니다.

 

이번에는 insert into입니다. (그러기앞서 먼저 빈 테이블을 한번 출력합니다)

 

print(sql_command('SELECT * FROM sample41'))

>>>

Empty DataFrame
Columns: [no, a, b]
Index: []

 

아무것도 없는 테이블에 insert into를 시행하고 다시 select문을 해보도록 합니다,

 

sql_command("INSERT INTO sample41 VALUES(1, 'ABC', '2022-02-09')")

print(sql_command('select * from sample41'))

>>>

   no    a           b
0   1  ABC  2022-02-09

이번에는 default값을 보도록합니다.

sql_command("INSERT INTO sample41 (no,a) VALUES(2, 'DEF')")

print(sql_command('select * from sample41'))

>>>

   no    a           b
0   1  ABC  2022-02-09
1   2  DEF        None

 

728x90

댓글