[Database][MySQL] SQL 기초: MySQL로 테이블 생성, 조회, 수정, 삭제 해보기

JIEUM KIM·2025년 3월 10일

Database

목록 보기
2/9
post-thumbnail

지난 포스팅에서는 데이터베이스의 개념과 다양한 데이터베이스의 유형을 살펴 봤다. 이번 포스팅에서는 현대 소프트웨어 개발에서 가장 널리 사용되는 관계형 데이터 베이스인 MySQL의 핵심 개념을 DDL(데이터 정의어), DML(데이터 조작어), DQL(데이터 조회어)로 나누어 설명하고, 각각의 예시를 직접 살펴보며 이해하는 시간을 가져보도록 하자.

📌 MySQL 개요

✏️ MySQL이란?

MySQL은 오픈 소스 기반의 관계형 데이터베이스 관리 시스템(RDBMS, Relational Database Management System)이다. 전 세계에서 가장 널리 사용되는 데이터베이스 중 하나로, 웹 애플리케이션, 기업 시스템, 빅데이터 분석 등 다양한 분야에서 활용된다.

🔧 특징

  • 관계형 데이터베이스 : 데이터를 테이블 형식으로 구조화하여 관리한다.
  • 다중 사용자 지원 : 여러 사용자가 동시에 데이터베이스에 접근이 가능하다.

✏️ SQL vs MySQL

SQL (Structured Query Language)

  • 데이터베이스에서 데이터를 조작하고 관리하는 언어이다.
  • 테이블을 만들고(CREATE), 데이터를 추가(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE)하는 등의 작업을 수행하는 표준 언어이다.
  • MySQL뿐만 아니라, Oracle, PostgreSQL, SQL Server, SQLite 등 다양한 데이터베이스에서 사용된다.

MySQL

  • SQL을 사용하는 관계형 데이터베이스 관리 시스템(RDBMS)이다.
  • 쉽게 말해 SQL을 실행할 수 있는 프로그램(소프트웨어)라고 이해하면 된다.
  • MySQL은 데이터를 저장, 관리, 검색할 수 있는 기능을 제공하며, SQL을 사용하여 데이터를 조작한다.

👉 SQL은 데이터베이스와 소통하는 언어이고,
👉 MySQLSQL을 사용하여 데이터를 저장하고 관리하는 프로그램이다.

💡 비유하자면?

  • SQL = 요리하는 법(레시피, 조리법)
  • MySQL = 주방(요리를 할 수 있는 공간, 도구가 있는 시스템)

이제 이어지는 챕터에서 MySQL을 통해 SQL의 기초를 이해해보도록 하자.


📌 MySQL을 통해 SQL 이해하기

지난 포스팅에서 설명한 것과 같이 SQL을 사용할때 주로 만나게 되는 명령어는 DDL, DML, DQL, DCL로 나뉜다. 이제 이 명령어들이 각각 무엇을 의미하고 어떤 상황에 쓰이는지 하나씩 알아보도록 하자.

✏️ DDL 테이블 구조 용어 정리

SQL 공부를 하다보니 필드, 컬럼, 레코드 등등 다양한 용어가 혼동되어 나오니 한번 정리를 해서 짚고 넘어가자.

용어설명
컬럼(Column) / 필드(Field)테이블의 열(세로 방향), 데이터의 속성
행(Row) / 레코드(Record)테이블의 한 줄(가로 방향), 개별 데이터
튜플(Tuple)행(Row)과 같은 의미 (DB 이론에서 사용)

📌 예제 테이블 (store)

CREATE TABLE store (
    id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(50) NOT NULL,  
    price INT NOT NULL  
);



### ✏️ DDL (데이터 정의어)
> DDL은 데이터베이스와 테이블을 **생성, 수정, 삭제**하는 명령어이다.

#### ✍️ 테이블 구조 확인 (CREATE TABLE) 
> 데이터를 저장할 테이블을 만든다.

```sql
CREATE TABLE store (  
    id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(50) NOT NULL  
);

show TABLES; # 현재 테이블 목록 조회

위 코드를 실행하면 아래 이미지와 같이 store라는 이름의 테이블이 생성된 것을 알 수 있다.

VARCHAR(50) : 문자열(50자까지)
AUTO_INCREMENT: 자동으로 1씩 증가하는 ID 값 설정
PRIMARY KEY: 테이블 내에서 고유한 값 설정 (중복 불가)
NOT NULL: 값이 반드시 입력되어야 함

✍️ 테이블 구조 확인 (DESC)

테이블의 필드 정보를 확인한다.

DESC store;

위 코드를 실행하면 다음과 같이 테이블의 필드 정보를 확인할 수 있다. 여기서 Field(필드)는 테이블의 열(colum)을 나타낸다. 현재 score의 필드에는 idname이 있다. 또한, 각 필드의 데이터 타입을 나타내는 Type이 있고 idname 각각 정수(int)와 문자열(varchar)이다. type옆의 Null은 NULL값의 허용 유무를 나타낸다. 현재 idname 모두 NO로 NULL값을 허용하지 않는다.

또한 눈여겨볼 사항인 Key가 있는데, 이것은 테이블의 키 제약조건을 나타낸다. 옵션으로는 PRI, UNI, MUL 이 있다. 자세한 사항은 다음 챕터에서 설명하도록 하고, 해당 테이블에서 id의 PRI는 고유키로서 중복된 id를 저장할 경우 오류를 발생시켜 중복된 값을 저장하지 않도록 한다.

다음은 Default인데, 기본값이 어떤상태를 나타내는지 알려준다. 현재 테이블에서 기본값을 지정해주지 않았으므로 (NULL)이 표시되어있다.

✍️ 테이블 삭제(DROP TABLE)

테이블 자체를 삭제한다. 데이터까지 전부 사라진다!

DROP TABLE store;

위 코드를 실행할경우 테이블 목록에서 store가 사라지고, 내부의 데이터 역시 날아가게 된다.

✍️ 테이블 수정(ALTER TABLE)

테이블에 필드를 추가하거나 삭제할 수 있다.

ALTER TABLE store ADD COLUMN price INT;  -- price 필드 추가  
ALTER TABLE store DROP COLUMN price;     -- price 필드 삭제  

위 코드의 첫번째 라인을 실행하게 되면 아래 이미지와 같이 price 필드(colum)가 추가된 것을 알 수 있다. 여기서 NOU NULL 옵션을 추가하지 않았기 때문에 빈문자열이 저장될 수 있다.

✏️ DML (데이터 조작어)

DML은 데이터베이스에 데이터를 삽입, 수정, 삭제 하는 명령어이다.

✍️ 데이터 삽입(INSERT INTO)

새로운 데이터를 추가한다.

INSERT INTO store (name, price) VALUES ('상품1',21000);
INSERT INTO store (name) VALUES ('상품2');

SELECT * FROM store; # 조회

위 코드를 실행하고 테이블 내용을 조회해보면(조회하는 방법은 뒷 챕터 다시 나온다.) name으로 지정하여 저장한상품 1,2에 각각 고유id가 부여되어 추가되었고, 상품1에는 21000이라는 가격 정보(price)가 저장된 반면, 상품2에는 가격 정보(price)를 입력해주지 않았기 때문에 (NULL)로 저장되었다.

✍️ 데이터 수정(UPDATE)

기존 데이터를 변경한다.

UPDATE store SET name = '변경된 상품' WHERE id = 1;

SELECT * FROM store; # 조회

위 코드의 흐름은 나는UPDATE 할거야 store라는 테이블을. 어떻게? name필드에 있는 데이터를 변경된 상품으로 SET 할거야. 데이터는 어디? (where )고유id1인 곳에 있어. 라고 생각하면 조금.. 쉬울 것이다..!
코드를 실행하면 아래 이미지와 같이 상품1변경된 상품으로 바뀐것을 알 수 있다.

✍️ 데이터 삭제(DELETE)

기존 데이터를 삭제한다.

DELETE FROM store WHERE id = 2;

SELECT * FROM store; # 조회

위 코드를 실행하면 아래 이미지와 같이 id2인 데이터가 삭제된 것을 알 수 있다.

✏️ DQL (데이터 조회어)

DQL은 데이터베이스에서 데이터를 검색하고 조회하는 명령어이다.

✍️ 모든 데이터 조회(SELECT * FROM)

		
SELECT * FROM store; 

✔ 모든 컬럼(*)을 가져온다.

위의 코드를 실행하면 아래 이미지와 같이 모든 필드의 정보가 보이는 것을 알 수 있다. 여기서 조금 눈여겨볼것은
데이터가 조금이나마 풍성? 해보이도록 바로 위 챕터에서 데이터가 삭제된 상태에서 2개의 상품을 추가했는데, id2 부터 시작하여 추가되는 것이 아닌 3으로 시작되어 추가된것을 알 수 있다. 이는 id를 고유 Key값으로 설정하였기 때문이다.
✔ name 필드만 조회

✍️ 특정 필드 조회(SELECT 필드명)

SELECT name FROM store;

위 코드를 실행하면 아래 이미지와 같이 name 필드의 데이터만 쇼잉하는것을 알 수 있다.

✍️ 조건을 사용한 데이터 조회(WHERE)

SELECT * FROM store WHERE name = '상품3';

✔ 특정 값만 검색
위 코드는 아래 이미지와 같이 name 필드의 상품3의 값을 가진 행 데이터를 불러온다.

✍️ 여러 조건을 조합하여 데이터 조회 (AND,OR)

SELECT * FROM store WHERE name = '상품3' AND id = 3;  -- 둘 다 만족  
SELECT * FROM store WHERE name = '상품2' OR id = 3;   -- 둘 중 하나 만족  

위 코드를 실행하면 첫번째 라인은 아무것도 출력되지 않는 반면 두번째 라인은 상품2의 행데이터가 출력된다.

✍️ 데이터 정렬(ORDER BY)

SELECT * FROM store ORDER BY id ASC;  -- 오름차순 정렬  
SELECT * FROM store ORDER BY id DESC; -- 내림차순 정렬  

✔ 오름차순 정렬 결과

✔ 내림차순 정렬 결과

✏️ DCL (데이터 제어어)

DCL은 사용자 권한을 설정하고 데이터 접근을 제어 하는 명령이다.

✍️ 사용자 계정 생성(CREATE)

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password123';

위 코드는 'newuser' 계정을 'localhost'에서 'password123'로 접속할 수 있도록 설정해주는 것이다.

✍️ 권한 부여(GRANT)

GRANT ALL PRIVILEGES ON store.* TO 'newuser'@'localhost';

위 코드는 store 데이터베이스에 대한 모든 권한을 newuser에게 부여한다.

✍️ 권한 회수(REVOKE)

REVOKE ALL PRIVILEGES ON store.* FROM 'newuser'@'localhost';

위 코드는store 데이터베이스의 모든 권한을 newuser에서 제거한다.

✍️ 사용자 삭제 (DROP USER)

DROP USER 'newuser'@'localhost';

위 코드는 newuser계정을 삭제한다.


📌 기본 키와 유니크 키 차이

✏️ 기본 키(PRIMARY KEY)

기본 키는 테이블에서 각 행을 고유하게 식별하는 컬럼이다.

🔧 특징

  • 한 테이블에 하나만 설정 가능하다.
  • NULL값을 가질수 없다.
  • 자동으로 인덱스가 생성되어 검색 속도가 향상된다.
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,  
    username VARCHAR(50) NOT NULL
);

위 코드에서 id 컬럼이 기본 키 역할을 하며, 중복되지 않는 고유 값이 된다.

✏️ 유니크 키(UNIQUE KEY)

유니크 키는 중복을 허용하지 않는 컬럼으로, 특정 필드의 값이 고유해야 할 때 사용된다.

🔧 특징

  • 한 테이블에 여러개 설정 가능하다.
  • NULL값을 가질 수 있다.
  • 자동으로 인덱스가 생성 된다.
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,  
    email VARCHAR(100) UNIQUE,  
    username VARCHAR(50) UNIQUE  
);

위 코드는 emailusername은 유니크 키로 설정되어 중복 입력이 불가능하다. 하지만, 둘 중 하나가 NULL이면 중복이 허용된다.

✏️ 유니크 키 vs 기본 키

유니크 키와 기본 키를 한마디로 정리하자면,

기본 키는 행을 식별하는 필수 값, 유니크 키는 특정 컬럼에서 데이터가 중복되지 않도록 설정할때 사용한다. (컬럼을 생성하거나 추가할때 옵션값으로 생각하면 된다.)

구분기본 키 (PRIMARY KEY)유니크 키 (UNIQUE KEY)
개수테이블당 1개만 가능여러 개 가능
중복 허용중복 불가중복 불가 (NULL은 허용)
NULL 허용(NULL 불가능)(NULL 가능)
자동 인덱스생성됨생성됨

📌 정리

이번 포스팅에서는 MySQL을 활용한 SQL의 기초 개념을 다뤄보았다. SQL은 이름 그래도 새로운 언어이므로 생소하기도 하지만 문법이 복잡하지 않아서 기초를 단단히 다진다면 복잡한 데이터구조를 배우는데에 조금은 어려움이 덜 수 있을 것 같다.

  • DDL (데이터 정의어) – 데이터베이스 및 테이블의 구조를 정의
    ✔ 테이블 생성(CREATE TABLE), 수정(ALTER TABLE), 삭제(DROP TABLE)
  • DML (데이터 조작어) – 데이터 삽입, 수정, 삭제
    ✔ 데이터 삽입(INSERT INTO), 수정(UPDATE), 삭제(DELETE FROM)
  • DQL (데이터 조회어) – 데이터 검색 및 조회
    ✔ 데이터 조회(SELECT), 조건 검색(WHERE), 정렬(ORDER BY)
  • DCL (데이터 제어어) – 데이터 접근 권한 관리
    ✔ 사용자 계정 생성(CREATE USER), 권한 부여(GRANT), 권한 회수(REVOKE), 사용자 삭제(DROP USER)

0개의 댓글