본문 바로가기
개발공부일지/DataBase

DataBase - MySQL 기본 사용 및 용어 정의

by Hynn1429 2023. 1. 4.
반응형

안녕하세요.

Hynn 입니다.

 

이번 포스팅에서는 MySQL 을 기초적으로 사용하는 방법에 대해서 정의해보도록 하겠습니다.

이를 바탕으로 실제 데이터베이스를 같이 설계하고, 실제 실습에서 적용을 같이 해보시면 좋을 것 같습니다.

 

=============

1. MySQL 기본 설명

2. MySQL 설치 및 설정

3. MySQL 기본 구성

4. MySQL 구문 사용법 

=============

1. MySQL 기본 설명

 

MySQL은 대표적으로 사용되는 관계형 데이터베이스 관리 시스템으로서, 데이터베이스의 관리를 위한 소프트웨어 입니다. 하지만 일반적으로 우리가 사용하는 GUI 형태의 툴은 내장되어 있지 않습니다. 따라서, 우리가 이전에 사용했던 Linux 처럼 , Command-Line Interface  를 사용하거나, GUI 형태를 지원하는 MySQL Workbench 를 이용할 수 있습니다.  

 

대표적인 오픈소스 기반의 무료 버전이 많이 이용되며, 유료형 프로그램도 존재합니다.

또한, MySQL 이 Sun

하지만 이번 포스팅에서는 무료앱 기반으로 Workbench 를 사용하지 않고, CLi 기반으로만 진행을 하도록 하겠습니다.

 

2. MySQL 설치 및 설정

설치방법은 최대한 간소화하여 설명드리도록 하겠습니다.

 

1. 먼저 HomeBrew 설치가 필요합니다. 만약 이전 포스팅을 따라오신분이라면, 이미 설치가 되어 있겠지만, 설치가 되지 않으신분들은 [iTerm 설정 및 Plug-in 설정하기] 를 참조하여, HomeBrew 설치를 먼저 완료해주세요.

 

2. 아래의 명령어를 사용하여 HomeBrew 를 최신버전으로 업데이트 후, mysql 을 설치해주세요.

brew update
brew install mysql

 

정상적으로 설치가 되었다면, 설치 완료가 되었을 것이고, 일반적으로 아래의 문구가 나타날 것입니다.

위의 예시사진은 설치가 이미 되어있다는 뜻입니다.

mysql_secure_installation

 

그럼 이제 아래의 화면과 같이 몇가지 설정을 해야 합니다.

 

 

 

위의 빨간 박스로 마킹된 부분만 사용자가 직접 입력해야 하는 항목입니다.

아래의 내용을 참고하시면 됩니다.

1) Would you like to setup VALIDATE PASSWORD component?
>> 유효한 패스워드를 설정할 것인지를 묻는 창입니다. Y 로 선택 후 Enter 설정하면 되겠습니다.


LOW = 비밀번호의 글자수가 8글자와 같거나 많아야 함
MIDIUM = 비밀번호의 글자수가 8글자와 같거나 많아야하며, 영어 대소문자,숫자 및 특수문자가 포함되어야 함
STRONG = 비밀번호의 글자수가 8글자와 같거나 많아야하며, 영어 대소문자,숫자 및 특수문자가 포함되어야 하며, 사전 파일이 필요함

비밀번호의 강도 설정입니다.

일반적으로 MIDIUM 단계만 되도 사용에는 제한이 없습니다.

 

2) Do you wish to continue with the password provided?
위에서 입력한 비밀번호로 사용할지를 묻는 메시지입니다.Y를 입력 후 Enter 를 입력합니다.

비밀번호를 최종적으로 사용할 것인지에 대한 묻는 창입니다.

 

3) Remove anonymous users?

방문사용자를 제거할지를 묻는 메시지입니다. 특별한 것이 아니라면 Y를 선택 후 Enter 를 입력합니다.

 

4) Disallow root login remotely?

root 사용자를 원격으로 허용하지 않겟는지를 묻는 창입니다. 역시 특정한 상황이 아니라면 Y를 선택 후 Enter 를 입력합니다.

 

5) Remove test database and access to it?

테스트 사용자를 제거할지를 묻는 메시지입니다. 역시 특정한 상황이 아니라면 Y를 선택 후 Enter 를 입력합니다.

6) Reload privilege tables now?

권한 테이블을 다시 로드할 것인지에 대해 묻는 메시지입니다. 역시 특정한 상황이 아니라면 Y를 선택 후 Enter 를 입력합니다.

이제 "All Done !" 이 나타나며 설치가 완료 됩니다. 기본 설치는 모두 끝났습니다.

 

3. MySQL 기본 구성

 

MySQL 의 명령어 구성은, 크게 5개의 카테고리로 이루어져 있습니다.

여기서 하위 구성에 따라 또 나뉘게 되는데요. 이 구성을 간단하게 살펴보도록 하겠습니다.

 

위의 각 명령어(쿼리문) 에 유형에 따라 5개로 나뉘어지며, 일부 명령어만 예시로 표현했습니다.

각각의 의미는 아래와 같습니다. 개념만 이해한다면, 어떠한 명령어가 필요한지에 대한 개념적 정의를 이해할 수 있습니다.

 

1)DDL(Data Define Language) 

데이터베이스의 구조 혹은 스키마를 정의할 때 사용합니다. 이 명령어는 데이터베이스의 테이블중에서도 "행" 에 영향을 미치기 때문에, 이 정의의 명령어를 입력하는 순간 즉시 수행/완료가 되기 때문에, 사용에 주의를 요해야 합니다.

 

주요명령어

명령어 설명
CREATE 데이터베이스의 테이블을 생성합니다.
ALTER 데이터베이스의 구조를 변경합니다.
DROP 데이터베이스의 테이블을 삭제합니다.
RENAME 데이터베이스의 테이블 이름을 변경합니다.
COMMENT 데이터에 주석을 추가합니다.
TRUNCATE 테이블에 할당된 모든 공간을 포함하여 모든 데이터를 삭제합니다.

 

2)DML (Data Manipulation Language)

데이터베이스의 관리를 담당하는 명령어입니다. DML로 분류되는 명령어의 특성은, 자동으로 Commit, 이 완료되지 않습니다. 즉, 이 명령어는 잘못된 입력을 햇을 경우, 영구적이지 않기 때문에 되돌릴 수 있습니다. 

 

주요명령어

명령어 설명
INSERT 테이블에 데이터를 추가(삽입)합니다.
UPDATE 테이블 내의 데이터를 수정할 때 사용합니다.
DELETE 테이블 내의 데이터를 삭제할 때 사용합니다.
MERGE 데이터가 테이블에 존재하지 않으면 INSERT, 존재할 경우, UPDATE를 수행합니다.

 

3) DCL (Data Control Language)

데이터베이스에 권한을 부여하는 기능입니다.

DDL과 마찬가지로, 데이터베이스 테이블에 직접적인 영향을 미칠 수 있기 때문에, 명령어를 입력하는 시점에 작업이 즉시 완료되는 명령어입니다. 이는 주로 권한설정(ex. 회원등급별 접근 데이터베이스가 예시가 될 수 있습니다. 예를들어 관리자의 경우 모든 회원정보 테이블에 접근할 수 있습니다.) 에 해당됩니다.

 

주요명령어

명령어 설명
GRANT 데이터베이스에 대한 사용자의 액세스 권한을 부여합니다.
REVOKE GRANT 로 부여한 액세스 권한을 제거합니다.

 

4) TCL (Transaction Control LAnguage)

데이터의 보안,무결성,회복,병행,수행제어등을 정의하는데 사용됩니다. 주로 데이터베이스의 안정성 및 무결성,보안등의 대한 관련 명령어가 여기에 포함됩니다. 일반적으로는 잘 사용하지 않습니다만, 데이터베이스 관리에 이러한 고급요소에 접근되는 명령어입니다.

 

주요명령어

명령어 설명
COMMIT 트랙잭션의 작업 결과를 반영합니다. 
ROLLBACK 데이터베이스를 마지막 COMMIT 된 시점의 상태로 복원합니다. 
SAVEPOINT SAVEPOINT 를 정의하면, COMMIT,ROLLBACK 의 개념에서 더 나아가, 백업지점을 설정하는 명령어입니다. 즉, COMMIT, ROLLBACK 으로 해결되지 않는 오류의 경우, 기존에 SAVEPOINT 를 설정 해 둔 상태라면, ROLLBACK 시 SAVEPOINT 시점으로 데이터베이스를 되돌릴 수 있습니다. 
SETTRANSACTION 트랜잭션을 설정합니다. 

 

5) DQL (Data Query Language) 

문법 그대로, 테이블 내의 데이터를 조회할 때 사용하는 명령어 입니다.

예시 명령어가 한가지 뿐이지만, 앞으로도 데이터베이스를 확인할 때 많이 사용하게 될 명령어 이기도 합니다.

이 명령어는 일반적으로 분류하는 곳에서는 DML 문에 DQL 을 포함하기도 하지만, 엄연히 별도의 구분이 있긴 합니다.

 

주요명령어

명령어 설명
SELECT 테이블 내의 데이터를 조회할 때 사용합니다.

 

4. MySQL 구문 사용법

MySQL 구문에서는 아래의 조건을 기억하면 좋습니다. 항상 모든 명령어가 완료된 뒤에는 " ; " 을 붙여 명령어의 끝을 지정해야 합니다.

그렇지 않은 경우, 명령이 실행되지 않습니다. 다만 즉시 수행이 완료되는 명령유형의 경우 " ; " 을 붙이지 않아도 완료가 될 수 있어, 주의를 요해야 하지만, 꼭 " ; " 을 입력하는 습관을 기르도록 합시다.

먼저 MySQL 에서 로그인을 해야 합니다.

 

먼저 아래의 명령어를 사용해야 합니다.

mysql -u root -p

위의 명령어는, MySQL 설치시 기본으로 생성된 "Root" 계정으로 접속할 때에 사용되는 기본 구문입니다.

만약 계정을 생성해서 root 외의 별도의 계정으로 접속을 하기 위해서는, 먼저 계정을 생성해야 합니다.

생성구문은 아래와 같습니다.

 

CREATE USER '[계정명]'@'localhost' IDENTIFIED BY '[Password]';

만약 이렇게 계정생성을 한다면 아래의 명령어로도 접속이 가능합니다.

mysql -u [계정명] -p
Password 입력

이제, 실제 데이터베이스의 데이터를 추가하기 위해, 하나의 데이터베이스 안에 테이블을 생성해보도록 하겠습니다.

여기서는 몇가지 설정을 지정해야 합니다. 이 방식은 이후에도 적용될 중요 요소이므로, 이 부분까지는 꼭 학습하도록 해야 합니다.

 

먼저 나의 Database 는 아래의 명령어를 사용할 수 있습니다.

SHOW DATABASES;

SHOW = DQL

SHOW 명령어는 DQL 에 해당하는 명령어 입니다. 

위의 정리된 대표예제외에도 다른 명령어가 있음을 기억해주시면 좋겠습니다.

이렇게 명령을 입력하면 나의 데이터베이스가 모두 확인이 가능합니다.

이제 여기서 새로운 데이터베이스를 생성하고, Table 역시 추가하면서 살펴보도록 하겠습니다.

먼저 데이터베이스를 아래의 명령어로 추가해보겠습니다.

 

CREATE DATABASE HynnBlog DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DDL 유형의 CREATE 를 입력 후, 유형을 선택해야 합니다. 여기서는 User, Database, Table 이 가능하며, 세번째의 값에는 실제 DataBase 명을 입력하면 되겠습니다.

명령을 입력하고 다시 아래의 명령어를 입력하면 이제 데이터베이스 목록에 위 데이터베이스가 추가된 것을 확인할 수 있습니다.

 

뒤의 명령어부터가 이제 중요한 점인데, 데이터베이스와, Table 생성시 가장 중요한 항목이 되겠습니다.

 

  • Default Character set  : 기본 문자세트를 지정합니다. 일반적으로 'utf-8' 을 설정합니다. 만약 다른 문자세트를 설정해야할 경우 그에 맞는 설정값을 입력하면 됩니다.
  • Default Collate : 기본정렬순서를 지정합니다. 기본적으로 사용은 'utf8_general_ci' 를 사용하지만, 다른 설정이 필요할 경우 그에 맞는 설정값을 부여해야 합니다. 

 

이제 테이블을 추가해보도록 하겠습니다.

여기서부터는 구조화 된 데이터베이스임을 한번에 체감할 수 있는, "행" 을 결정해야 합니다. 이를 엑셀로 표현하면 아래와 같습니다.

 

일련번호 이름 나이 성별 전화번호 이메일
1 Hynn 100 남자 010-1234-1234 example@example.com

 

위의 예시를 본다면, 여기서 구조화가 되야 하는것은, 일련번호, 이름 , 나이 , 성별, 전화번호, 이메일 입니다.

즉, 구조화된 데이터라는 것은 위의 지정된 분류에 맞게 데이터베이스가 업데이트 되어야 한다는 것이기도 합니다. 이를 구성하기 위해서는 위의 데이터베이스를 생성할 때 처럼, 데이터의 형태를 부여해야 합니다.

 

USE HynnBlog;
CREATE TABLE HynnBlogInfo (
    일련번호 INT NOT NULL AUTO_INCREMENT,
    이름 VARCHAR(100) NOT NULL,
    나이 VARCHAR(100) NOT NULL,
    성별 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(100) NOT NULL,
    이메일 VARCHAR(100) NOT NULL,   
);

위의 명령이 기본적으로 테이블을 생성하는 구문입니다.

여기서 알아야 할 명령은 크게 아래와 같은 문자열정의 방식이 존재합니다. 이를 반드시 테이블 생성시 지정해야 합니다.

 

1) Key

MySQL 에서 기본적으로 키의 유형을 지정할 수 있습니다. 위의 예시에서는 지정하지 않았지만 아래의 유형에 맞추어 키를 지정할 수 있습니다.

 이 키는 지정시 아주 즁요한 요소가 될 수 있기 때문에, 설정시 의도를 명확하게 정리 후 생성해야 합니다.

 

명칭 설명
PRIMARY KEY 이 키는 테이블 당 1번만 설정이 가능합니다.
고유한 값을 지정하게 되고, "중복"된 데이터가 입력될 수 없습니다.
대표적으로 회원가입시에 ID 값을 이를 지정하면,
아이디의 중복을 Database 에서 차단할 수 있습니다. 
또한 이 PRIMARY KEY 는 Null, 즉 빈칸입력을 허용하지 않습니다.
FOREIGN KEY 다른 테이블의 PRIMARY KEY 를 참조하는 필드입니다. 여기서는 두 개의 테이블을 연결하고 참조 정직성을 유지할 때 사용합니다.
UNIQUE KEY 이 키는 테이블의 모든 행에서 고유한 키로 설정할 수 있지만, Null 을 허용합니다.
PRIMARY KEY 가 테이블에서 1번만 사용되는것에 비해,
여러 행에서 사용이 가능한 차이점이 있습니다. 
INDEX 한 개 이상의 열의 값을 기반으로 테이블에서 행을 빠르게 조회할 수 있는 데이터 구조를 가질 수 있습니다. 테이블에서 특정 행을 찾기 위한 쿼리의 속도를 향상할 수 있습니다. 

 

2) Number

여기서는 숫자로만 이루어진 데이터를 사용할때 주로 사용됩니다.

기초적으로 이용하지는 않는 타입을 지정하는 것인지라, 참고형태로 알고 계시거나, 지나치셔도 좋을 내용입니다.

하지만 여기서 아래의 Number 에서 언급하지 않은 항목 중 "AUTO_INCREMENT" 라는 속성은 반드시 알아야 할 속성이기도 합니다.

 

INT 를 부여시 사용할 수 있는 속성인데요.

이 속성의 가장 큰 특징은 아래의 특징을 가지고 있습니다.

명령어 설명
AUTO_INCREMENT 새 행이 테이블에 삽입될 때 마다, 자동으로 사용가능한 정수 값으로 설정 됩니다.
즉, 최초 테이블에는 1개의 행이 있다면 1이 자동으로 부여되고,
추가될 때마다 2, 3, 4 형식으로 부여가 됩니다.

 

다만, 게임을 좋아하시는 분들이라면, INT 의 숫자는 어디서 많이 본 숫자일 수도 있습니다 . (ex. 32비트 게임의 최대표현가능 숫자는..)

명칭 설명
TINYINT -128 ~ 127 사이의 정수의 값
SMALLINT -32,768 ~ 32,767 사이의 정수의 값
MEDIUMINT -8,388,608 ~ 8,388,607 사이의 정수의 값
INT -2,147,483,648 ~ 2147483647 사이의 정수의 값
BIGINT -9223372036854775808 ~ 9223372036854775807 사이의 정수의 값 

3)String

제일 많이 사용하게 될 타입입니다.

여기서 대표적으로 사용되는 항목은 CHAR, VARCHAR, TEXT 세가지 입니다.

이외의 3가지는 사용한다면 실제 게시판의 텍스트를 최대한 크게 유지해야 할 경우가 될 수 있습니다.

 

여기서 글자(Byte) 라고 표기된 것에 대한 추가적 개념을 이해하기 위해서는 우리가 대표적으로 사용하는 한글은 2 Byte 언어 입니다.

즉 영어로 표현시 "male" 이라는 글자는 4글자 이므로 4 byte 가 되지만,

한글의 경우 "남자" 라고 하는 글자는 2Byte 로 계산되기에 역시 4Byte 로 계산해야 합니다. 

아마도 macOS 사용자분들은 2Byte 언어 사용시에 자음모음 분리 현상을 경험해보셨기 때문에,

영어와 한글의 차이도 어느정도 인지할 수 있으리라 생각됩니다.

명칭 설명
CHAR 최대 길이 255 글자(Byte) 고정의 문자열 값
VARCHAR 최대 길이 65,535(Byte) 가변의 문자열 값
TEXT 최대 길이 65,535글자(Byte)인 문자열 값
TINYTEXT 최대 길이 255글자(Byte)인 문자열 값
MEDIUMTEXT 최대길이 16,777,215 글자(Byte) 인 문자열 값
LONGTEXT 최대길이 4,294,967,295 글자(Byte)인 문자열 값

4) Date

DATE 유형을 사용하여 날짜 값을 저장할 수 있습니다. 기본적인 형식은 "YYYY-MM-DD" 형식으로 저장됩니다. 시간의 경우에는 HH:MM:SS 형태로 저장합니다. 이러한 시간을 설정할 때는, 날짜와 시간을 분리하거나, 합칠수도 있습니다.

 

명칭 설명
DATE 년월일을 표시합니다.
TIME 시간을 표시합니다.
DATATIME 년월일시간을 표시합니다. 
TIMESTAMP 특정하게 값을 지정하지 않으면, 자동으로 현재 날짜 및 시간으로 값이 설정됩니다.

5) Buffer

이 유형의 데이터 타입을 지정하면, 테이블에 이미지, 오디오 혹은 비디오 파일과 같은 용량이 큰 파일을 저장할 수 있습니다. 

이를 "BLOB" 라고 하며, 유형별로 최대 저장가능한 데이터가 지정되어 있습니다. 

명칭 설명
TINYBLOB 최대 사이즈 255 byte 
BLOB 최대 사이즈 65,535 byte
MEDIUMBLOB 최대 사이즈 16,777,215 byte
LONGBLOB 최대 사이즈 4,294,967,295 byte

 

6) NULL or NOT NULL

이 값은, 추가적으로 위의 유형별 데이터에서 추가적으로 빈 값을 허용할지, 허용하지 않을지에 대해서 정의합니다.

즉 NULL 은 빈 값도 허용하지만, NOT NULL 은 빈 값을 허용하지 않게 지정됩니다.

 

명칭 설명
NULL 데이터에서 빈 값을 허용합니다.
NOT NULL 데이터에서 빈 값을 허용하지 않습니다.

 

더보기

*번외편)

아마 위의 예시를 그대로 복사하여 사용하시게 될 경우, Syntax Error 가 발생하게 될 것입니다.

이는, 위의 데이터 테이블이 "한글" 이기때문에, 발생하는 오류 입니다.

일반적으로는 영어로 변경하는 것을 권장합니다만, 꼭 한글을 써야할 때는 아래의 명령을 추가해야 합니다.

 

CREATE TABLE HynnBlogInfo (
    일련번호 INT NOT NULL AUTO_INCREMENT,
    이름 VARCHAR(100) NOT NULL,
    나이 VARCHAR(100) NOT NULL,
    성별 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(100) NOT NULL,
    이메일 VARCHAR(100) NOT NULL,
    PRIMARY KEY (일련번호)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

일반적으로 MySQL 의 기본 Engine 은 'MyISAM' 이라는 구성으로 되어 있습니다. 하지만 한글을 사용하기 위해서는 몇가지 방법이 존재하지만, 가장 쉽게 설정하는 방법은 InnoDB Engine 으로 지정하는 것입니다. 문자열은 utf8 로 지정한 것을 볼 수 있습니다.

 

이제 위의 키를 바탕으로, 테이블의 데이터 정의를 알아보기 위해 아래의 명령어를 추가적으로 사용해서 확인해보도록 하겠습니다.

 

DESC HynnBlogInfo;

위의 데이터를 보면 이제 아래의 해석이 가능합니다.

일련번호는 INT 라는 숫자유형의 데이터를 담고 있고, 중복된 값을 허용하지 않는 NOT NULL 입니다. 또한 이 데이터는 자동으로 정수형 숫자로 추가될 때마다 1,2,3 ~ 으로 생성됩니다.

반면, 이름~이메일은 가변형 문자 데이터로 NULL 을 허용하지 않는 최대 100byte 의 데이터를 저장할 수 있습니다.

 

이제 이를 바탕으로, 데이터는 어떻게 보는지, 추가/수정/삭제는 어떻게 하는지에 대해서 간략하게 살펴보도록 하겠습니다.

 

 

1) 데이터 확인하기.

 

데이터 확인의 경우, DQL 문을 사용해야 합니다.

즉, "Select" 문을 이용하면 편리하게 조회가 가능합니다.

Select * from [TableName]

가장 일반적인 데이터 검색문입니다. 

여기서 " * " 표시는 전체를 뜻하는 기호이며, 이전에 CSS 를 기억하시는분들이라면, 전역을 뜻하는 기호임을 잘 아시리라 생각합니다.

여기서 우리는 몇가지 옵션을 부여하여 특정 값을 검색할 수 도 있습니다.

 

이 조건문은, 여타 다른 문법에서도 사용할 수 있으므로, 반드시 조건문의 어떠한 방식으로 이루어지는지 숙지해두시거나, 메모해두시는것을 추천드립니다.

기본적으로 데이터의 손상이 되지 않는 선에서 SELECT 구문을 기준으로 작성해보겠습니다.

**이외에도 사용하는 명령문에 따라 특화된 조건문이 존재할 수 있습니다. 필요한 경우 추가적인 검색을 권유드립니다.

 

문법 작성예시 설명
*  Select *  전역을 선택합니다.
즉 macOS 에서 전체 디렉토리를 선택한다는 의미와 동일합니다.
이 표시를 사옹하면 전체를 선택하는것을 의미합니다.
FROM Select * From [TableName] From 은 어떤 데이터베이스(테이블)의 데이터로부터 보여줄 지
를 뜻합니다.
즉, FROM 을 사용할 경우,
FROM 뒤에 붙는 테이블의 전체 데이터가 되고,
조건에 따라 전체를 볼지, 일부를 볼지 선택할 수 있습니다.
WHERE SELECT * FROM [TableName] WHERE [조건] 조건을 부여하는 조건문입니다.
여기서는 [테이블명] 의 전체 데이터 중 [조건]에 맞는 데이터를 출력합니다.
BETWEEN SELECT * FROM [TableName] WHERE [조건] BETWEEN [값1] AND [값2] WHERE 절에 이어, BETWEEN 과 AND 는 각각의 의미를 나타냅니다. BETWEEN 은 사이의 값을 구하고자 하는 경우이고, 이를 위해 최소값인 [값1] AND [값2] 가 사용됩니다. 
AND
OR SELECT * FROM [TableName] WHERE [조건1] or [조건2] WHERE 절에서 한단계 조건을 추가로 부여합니다. 즉 여기서는 기존처럼 조건1개에 대한 검색이 아니라, 조건1 혹은 조건2 중 하나라도 일치하는 결과물을 모두 나타냅니다.
IN SELECT * FROM [TableName] WHERE [속성] IN [조건1,2,3...] 선택된 테이블의 전체 데이터 중, 속성의 값이 조건과 일치하는 값을 출력합니다.
여기서 조건을 여러개 입력하면 OR로 인식되어,
조건1 혹은 조건2 혹은 조건3 과 같은 식으로 확인합니다.
NOT IN SELECT * FROM [TableName] WHERE [속성] NOT IN [조건1,2,3...] 선택된 테이블의 전체 데이터 중, 속성의 값이 조건이 포함되지 않는 값을 출력합니다.
여기서 조건을 여러개 입력하면 OR로 인식되어,
조건1 혹은 조건2 혹은 조건3 과 같은 식으로 확인합니다.
WHERE NOT SELECT * FROM [TableName] WHERE NOT [조건] 테이블에서 [조건]을 만족하지 않는 행의 모든 열을 나타냅니다.
LIKE SELECT * FROM [TableName] WHERE (속성) LIKE A_
SELECT * FROM [TableName] WHERE (속성) LIKE A__
SELECT * FROM [TableName] WHERE (속성) LIKE A%
SELECT * FROM [TableName] WHERE (속성) LIKE %A
SELECT * FROM [TableName] WHERE (속성) LIKE %A%
테이블에서 [속성]의 값 중, A를 기준으로 아래의 의미를 가집니다.
_ , __ = _ 당 1글자, 즉 A+1, A+2 와 같은 의미를 지닙니다.
A% = A로 시작하는 값
%A = A로 끝나는 값
%A% = A를 포함하는 모든 값

위의 조건에 맞추어, 행의 모든 열을 나타냅니다.
ORDER BY SELECT * FROM [TableName] ORDER BY [속성] [순서] 테이블에서 지정된 속성을 오름차순 혹은 내림차순으로 정렬하여 나타냅니다. 기본값은 오름차순 입니다. 이를지정하기 위해서는 아래의 순서를 지정할 수 있습니다.
ASC - 오름차순
DESC - 내림차순
AS SELECT [속성] as '[애칭]' FROM [TableName] 속성을 애칭으로 변경하는 의미를 뜻합니다. 
DISTINCT SELECT DISTINCT [속성] FROM [TableName] 테이블에서 속성에 해당하는 값을 출력시 [중복]을 제외하고 출력합니다. 

2) 데이터 추가하기

위의 조건문을 활용하면 이제, 일부 혹은 전체를 조작할 수 있게됩니다.

여기서부터는 구문이 비교적 적다 느껴지실 수 있겠지만, 조건문을 활용하면 무궁무진한 방법이 존재하겠습니다.

따라서, 자신이 사용하고자 하는 구문의 조건을 어떻게 부여할지를 잘 활용하면 다양한 방법으로 데이터를 조합할 수 있게 됩니다.

 

기본 사용법 예제

INSERT INTO [TableName] (속성값) VALUES (입력을 윈하는 데이터값)
EX)
INSERT INTO HynnBlogInfo (이름, 나이, 성별, 전화번호, 이메일) values ('Hynn', 20, '남자', '010-1234-1234', 'example@example.com');

위의 예재로 생성한 테이블의 경우, 모두 NOT NULL 설정이 되어 있기 때문에, NULL 데이터는 입력할 수 없습니다.

하지만 만약 NULL 데이터를 허용하는 테이블이 있어, 비워두고 일부만 입력을 희망하는 경우, 속성값에 일부만 입력도 가능합니다.

 

아래는 그 예제입니다.

 

INSERT INTO HynnBlogInfo (이름, 이메일) values ('Hynn', 'example@example.com');

 

 

3) 데이터 수정하기

 

데이터 수정역시 간단하게 조절이 가능합니다.

바로 "UPDATE" 문을 이용할 수 있는데요. 이 문법을 이용하여, 일부 데이터 혹은 전체 데이터를 업데이트 할 수 있습니다.

바로 예제 살펴보도록 하겠습니다.

UPDATE [TableName] SET 속성명 = 변경하고자하는 데이터값 WHERE 속성명= 기존값
**String 문자는 반드시 ''사이에 입력해야 합니다.

UPDATE HynnBlogInfo SET 이름='Hynn2' WHERE 이름='Hynn';

 

4) 데이터 삭제하기 

 

삭제 역시도, 간단합니다.

여기서는 "DROP" 과 "DELETE" 명령이 존재합니다.

여기서 대체로 사용되는 것은 "DELETE" 입니다. 이 두가지가 어떤 차이인 것인지, 몇개의 데이터를 추가하여 살펴보도록 하겠습니다.

 

DROP : Table을 삭제합니다.

DELETE : 테이블 내의 데이터를 삭제합니다.

 

특히나 DELETE 의 경우, 반드시 주의해야 할 점이 있습니다.

바로 "WHERE" 를 같이 사용하지 않는 경우, 테이블 내의 데이터를 다 삭제를 하게 될 수도 있습니다. 특히나 이 명령어는 즉시 실행(Commit) 이 완료되는 "DML" 의 명령이기 때문입니다.

 

기본 사용법

DROP [TableName]
DELETE [TableName]

Where 절을 사용하지 않으면, 위 명령어를 이용하면 위의 언급한대로, 전체 데이터가 삭제가 됩니다.

단 DROP 은 테이블 자체를 삭제합니다. 

하지만, DELETE 는 Table 은 유지하되, Table 내의 모든 데이터를 삭제하는 것이 그 차이입니다.

 

따라서, 일반적으로 Table 을 더 이상 남겨둘 이유가 없는 경우라면, DROP 으로 모두 삭제가 되지만, DELETE 를 사용할 때, 반드시 WHERE 문을 사용하여, 원하는 데이터만 삭제할 수 있도록 지정해야 합니다.

만약 특정 이름을 가진 데이터를 삭제하기 위해서는 아래의 예시처럼 사용할 수 있습니다.

DELETE FROM [TableName] WHERE [속성명]=[값]

ex)
DELETE FROM HynnBlogInfo WHERE 이름='Hynn'

 

위에서 언급했듯이, 문자열(String) 일 경우, '' 로 감싸줘야 올바르게 인식됩니다.

 

 

기초적인 MySQL 문법을 학습해보았습니다.

이 문법외에도 다른 문법이 많습니다. 직장에서 Excel 을 다루어보셨던 분들이라면, 다소 친숙하게 느껴질 수 있는 SQL 이기도 합니다.

 

단순히 외움보다는, 개념을 이해하면 보다 쉽게 사용이 가능합니다.

 

다음 포스팅에서 뵙겠습니다.

감사합니다.

반응형

'개발공부일지 > DataBase' 카테고리의 다른 글

ORM - DBDiagram 작성해보기  (1) 2023.01.16
ORM - Sequelize 기본 사용하기  (0) 2023.01.12
ORM - ORM 기본 이해하기  (0) 2023.01.10
DataBase - MVC Patten 이해하기  (0) 2023.01.04
DataBase - DBMS 에 관하여  (0) 2023.01.03

댓글