살구월드

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

데이터베이스 관련 포스팅 목록

2020/07/12 - [Linux/DB] - MySql Delete 쿼리(Ubuntu, MySQL, Delete)

2020/06/19 - [Linux/DB] - MYSQL UPDATE 쿼리

2020/06/18 - [Linux/DB] - MYSQL SELECT 쿼리

2020/04/26 - [Linux/DB] - Linux Ubuntu MYSQL 데이터베이스 설치하기

 

 


목차

 

 

     

     

     

     

     

    쿼리문 필요성

    안녕하세요. 오늘은 데이터베이스 데이터를 관리하는 마지막 단계인 삽입 쿼리에 대해 알아보겠습니다.

    이전 포스팅에서 데이터를 조회하는 Select 쿼리, 데이터를 수정하는 Update 쿼리, 데이터를 삭제하는 Delete 쿼리에 대하여 알아보았습니다.

    오늘은 드디어 마지막 삽입이네요. 데이터의 삽입 예제는 테스트를 위해 이전에도 확인하였습니다. 

    Students라는 학생들의 정보를 관리하는 테이블이 있습니다. 테이블만 있으면 데이터베이스가 존재할 이유가 없겠죠?

    어떤 학생이, 어떤 정보를, 어떻게 가지고 있는지 정의가 되어있어야 실제 의미가 부여된 데이터베이스라고 할 수 있겠습니다.

    의미가 있어야 진정한 데이터이다


    데이터베이스의 사용성이 높아지려면 정확한 데이터와 정확한 관계가 필요합니다.

    수치의 오차율이 높고 애매한 주제로 엮인 값들이 섞여있으면 DB를 사용하는 사람 입장에선 답답하고 신뢰할 수 없는 데이터베이스가 되겠지요

    따라서, 실제 현실세계에서 측정하는 값을 우선적으로 종합하고 축약하고 정확한 수치만을 선택합니다.

    이후 이 값들의 주제를 잘 파악해서 공통점이 있는 값들끼리는 관계를 설정하고 테이블에 입력하는 것입니다.

    관계 사회


    Insert 문은 바로 이러한 과정들에 꼭 필요한 쿼리입니다. 데이터베이스에 값을 저장하여 없어지지 않고 계속 유지될 수 있도록 해줍니다.

    오늘은 이 삽입 쿼리를 직접 실행하고 여러가지 사용법에 대하여 알아보겠습니다.

    우선 쿼리가 어떻게 생겼는지 구조부터 파악해보겠습니다.

     

     

     

    쿼리 구조 설명

    INSERT INTO 테이블명(속성명1, 속성명2, ...) VALUES(속성1 값, 속성2 값, ...)
    
    
    INSERT INTO 테이블명 VALUES(속성1 값, 속성2 값, ...)
       - 전체 속성 값 입력

     

    insert 문은 INTO 지시자를 통해 테이블을 결정할 수 있습니다. 그리고 이 테이블의 어떤 속성 값을 변경할 것인지 명시해야 합니다.

    만약 속성명을 지정하지 않는다면 두번째 줄의 예시 처럼 VALUES에 해당 테이블의 속성 순서대로 값을 대입해주어야 합니다.

    만약 대입하는 속성이 NULL 허용, AUTO_INCREMENT 키워드 설정 등의 옵션이 있다면 값을 지정하지 않아도 괜찮습니다.

    하지만 이외의 속성은 반드시 값을 지정해야 합니다.

    더 자세한 내용은 예제를 실행해보면서 확인해보겠습니다.

     

     

     

    예제 목표

    이번 포스팅의 목표는 테이블명에 "삽입할 데이터의 속성명을 지정한 경우" 와 "속성명을 지정하지 않은 경우" 의 차이점을 확실히 이해하는 것입니다.

    속성명을 지정하고 이상한 값을 대입하면 당연히 에러가 발생하겠죠?

    또한 속성명을 지정하지 않은 상태에서 값을 지정하지 않으면 역시 에러가 발생할 것입니다.

    이러한 차이점을 확실하게 이해하는 것이 목표입니다.

     

     

     

    예제 테이블 생성

    CREATE TABLE students_i ( id INT AUTO_INCREMENT PRIMARY KEY, name TEXT, desc TEXT NOT NULL, score INT, class_id INT );

     

    students_i 테이블 구조

     

    이번 insert 테스트에선 select 포스팅에서 다뤘던 테이블 구조에서 조금더 변경하여 테스트를 진행하겠습니다.

    위의 명령을 실행하여 예제 테이블을 생성합니다.

     

     

     

    속성명을 지정하여 데이터 삽입

    insert into students_i(id, name, description, score, class_id) values(0, 'kim', 'hello~', 80, 1);

     

    데이터 삽입에 성공한 모습

     

    위의 명령을 실행한 경우 정상적으로 데이터가 삽입되었다는 메세지가 출력됩니다.

    속성명을 지정한 경우 해당 값에 옳바른 값을 대입해야 합니다. 이번에는 int 형 속성인 score에 문자열 값을 대입해보겠습니다.

     

    insert into students_i(id, name, description, score, class_id) values(0, 'soo', 'yeah', 'heooo', 3);

     

    대입 값의 형식이 달라 삽입에 실패하는 모습

     

    위와 같이 insert 명령이 실패하는 것을 알 수 있었습니다.

    다음으로는 속성명은 지정했으나 실제 값을 대입하지 않는 경우를 생각해보겠습니다.

     

    insert into students_i(id, name, description, score, class_id) values(0, 'soo', 'yeah', 70);

     

    속성과 값 대입이 일치하지 않아 발생하는 예외

     

    class_id 속성에 대한 값을 지정하지 않은 경우 위와 같이 에러가 발생하는 것을 확인하였습니다.

    따라서 속성명을 지정하여 데이터를 삽입하는 경우에는 값이 잘 대입되고 있는가를 판단해야 합니다.

     

     

     

    속성을 지정하지 않고 데이터 삽입

    insert into students_i values(0, 'heo', 'kawai', 40, 2);

     

    속성명을 지정하지 않고 데이터를 삽입한 화면

     

    테이블명 옆에 속성을 지정하지 않아도 대입하는 값의 순서가 정확하면 에러가 발생하지 않는 것을 알 수있습니다.

    students_i 테이블의 3번째 속성인 "description" 는 NOT NULL 옵션이 지정되어 있습니다.

    이번에는 desc 값에 아무 값도 대입하지 않아보겠습니다.

     

    insert into students_i values(0, 'heo', , 40, 2);

     

    필수로 필요한 description 항목이 있기 때문에 입력해야할 값 개수가 맞지않아 에러 발생

     

    예외가 발생하여 데이터 삽입이 불가능한 것을 확인하였습니다.

     

     

     

    마무리

    이번 포스팅에서는 MySQL 에서 데이터를 삽입하는 INSERT 쿼리에 대하여 알아보았습니다. 다음 포스팅에선 관계를 설정하는 방법에 대하여 알아보겠습니다.

    잠깐, 리눅스, C 언어, Java, Python 등
    각종 예제 검색하기

    공유하기

    facebook twitter kakaoTalk kakaostory naver band