MySQL 명령어 가이드: 초급부터 중급까지 기본, CRUD, 사용자, 백업 및 문제 해결

目次

1. Introduction

MySQL은 데이터베이스 관리 시스템(DBMS) 중에서 널리 사용되는 오픈소스 관계형 데이터베이스입니다. 특히 웹 애플리케이션과 기업 시스템에서 인기가 높습니다. 이 글에서는 MySQL의 핵심 명령어들을 자세히 설명하고, 초급부터 중급 사용자까지 부드럽게 학습할 수 있도록 내용을 구성합니다.

1.1 What is MySQL?

MySQL은 관계형 데이터베이스(RDB)를 관리하기 위해 사용되는 소프트웨어입니다. 데이터는 테이블에 저장되며, SQL(Structured Query Language)을 사용해 데이터를 조작합니다. MySQL은 다음과 같은 특징을 가지고 있습니다:

  • 오픈소스이며 누구나 무료로 사용할 수 있음
  • 빠르고 가벼운 성능
  • 다양한 프로그래밍 언어와 호환 (예: PHP, Python, Java)
  • 대규모 데이터베이스 운영에 적합

1.2 Benefits of Learning MySQL Commands

MySQL을 효율적으로 사용하려면 기본 명령어를 이해하는 것이 중요합니다. 주요 이점은 다음과 같습니다:

  • 보다 효율적인 데이터 관리 : SQL 명령어를 숙달하면 데이터를 빠르게 조회, 업데이트, 삭제할 수 있습니다
  • 워크플로 자동화 : 스크립트를 사용해 데이터베이스 작업을 자동화할 수 있습니다
  • 원활한 오류 처리 : 문제가 발생했을 때 적절한 SQL 명령어로 해결할 수 있습니다

1.3 What You Will Learn in This Article

이 글에서는 다음 주제를 자세히 다룹니다:

  • 기본 MySQL 작업(시작, 연결, 데이터베이스 작업)
  • 데이터 추가, 조회, 업데이트, 삭제(CRUD 작업)
  • 사용자 관리 및 권한 설정
  • 유용한 명령어와 트러블슈팅

다음 섹션을 차례대로 진행하겠습니다. 먼저 기본 MySQL 작업부터 시작해 보겠습니다.

2. Basic MySQL Operations (Beginner-Friendly)

2.1 Starting and Connecting to MySQL

2.1.1 Starting MySQL

MySQL은 서버 프로그램으로 실행되기 때문에 먼저 서버를 시작해야 합니다. 시작 방법은 OS에 따라 다릅니다.

Starting on Linux / macOS

Linux와 macOS에서는 systemctl 명령을 사용해 MySQL을 시작할 수 있습니다.

sudo systemctl start mysql

MySQL이 실행 중인지 확인

sudo systemctl status mysql

“active (running)”이라고 표시되면 MySQL이 정상적으로 실행되고 있는 것입니다.

Starting on Windows

Windows에서는 MySQL을 서비스로 실행하는 경우가 많아 net start 명령을 사용할 수 있습니다.

net start mysql

또는 XAMPP를 사용하는 경우 XAMPP Control Panel을 열고 “MySQL” 항목의 “Start” 버튼을 클릭합니다.

2.1.2 Connecting to MySQL

MySQL에 연결하려면 mysql 명령을 사용합니다. 기본 연결 명령은 다음과 같습니다:

mysql -u username -p
Connect as the root user

기본적으로 root 사용자는 관리자 권한으로 설정되어 있습니다. 다음 명령으로 연결할 수 있습니다:

mysql -u root -p

Enter 키를 누르면 비밀번호 입력을 요구합니다. 올바른 비밀번호를 입력하면 MySQL에 로그인됩니다.

Connect to a specific host

원격 MySQL 서버에 연결하려면 -h 옵션을 사용합니다.

mysql -h hostname -u username -p

예를 들어 192.168.1.100에 있는 MySQL 서버에 연결하려면 다음과 같이 입력합니다:

mysql -h 192.168.1.100 -u root -p
Connect by specifying a port number

기본 MySQL 포트는 3306입니다. 포트가 변경된 경우 -P 옵션으로 지정할 수 있습니다.

mysql -h 192.168.1.100 -P 3307 -u root -p

2.2 Basic MySQL Commands

MySQL에 연결된 후 기본 명령어들을 실행해 보세요.

2.2.1 Check the MySQL version

현재 사용 중인 MySQL 버전을 확인하려면 다음 명령을 실행합니다:

SELECT VERSION();

2.2.2 Check the current database

현재 선택된 데이터베이스를 확인하려면 다음을 실행합니다:

SELECT DATABASE();

데이터베이스가 선택되지 않은 경우 NULL이 반환됩니다.

2.2.3 List available databases

MySQL에 존재하는 데이터베이스 목록을 보려면 다음을 사용합니다:

SHOW DATABASES;

2.3 Common Errors and Fixes

2.3.1 “Access denied” error

예시 오류:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
문제 해결 방법:
  1. 비밀번호가 올바른지 확인합니다
  2. root 권한을 확인하고 재설정합니다
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEW_PASSWORD';
    FLUSH PRIVILEGES;
    

2.3.2 “‘localhost’에서 MySQL 서버에 연결할 수 없습니다” 오류

예시 오류:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
문제 해결 방법:
  1. MySQL이 실행 중인지 확인합니다 ( systemctl status mysql )
  2. MySQL을 재시작합니다
    sudo systemctl restart mysql
    

2.4 요약

이 섹션에서는 MySQL을 시작하고 연결하는 방법을 설명했습니다.

3. 데이터베이스 작업

MySQL에서는 데이터를 관리하기 위해 데이터베이스를 생성하고, 그 안에 테이블을 배치하여 정보를 조직합니다. 이 섹션에서는 데이터베이스를 생성, 선택, 나열 및 삭제하는 기본 작업을 자세히 설명합니다.

3.1 데이터베이스 생성

MySQL에서 데이터베이스를 생성하려면 CREATE DATABASE 명령을 사용합니다.

3.1.1 기본 데이터베이스 생성

다음 SQL 명령을 실행하면 my_database라는 새 데이터베이스를 생성할 수 있습니다.

CREATE DATABASE my_database;
생성 성공 시 메시지
Query OK, 1 row affected (0.01 sec)

3.1.2 이미 존재하는 데이터베이스를 생성하려 할 때

데이터베이스가 이미 존재하면 다음과 같은 오류가 표시됩니다:

ERROR 1007 (HY000): Can't create database 'my_database'; database exists

이 오류를 방지하려면 IF NOT EXISTS 옵션을 추가하는 것이 유용합니다.

CREATE DATABASE IF NOT EXISTS my_database;

이 명령을 실행하면 데이터베이스가 아직 존재하지 않을 때만 생성됩니다.

3.2 데이터베이스 목록 보기

현재 MySQL 서버에 존재하는 데이터베이스를 확인하려면 SHOW DATABASES 명령을 사용합니다.

SHOW DATABASES;

예시 출력:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| my_database       |
| mysql             |
| performance_schema |
| sys               |
+--------------------+

참고: mysqlinformation_schema와 같은 시스템 데이터베이스는 MySQL 관리에 필요합니다.

3.3 데이터베이스 선택

MySQL에서는 사용하려는 데이터베이스를 선택해야 합니다. 데이터베이스를 지정하려면 USE 명령을 실행합니다.

USE my_database;
성공 시 메시지
Database changed

현재 선택된 데이터베이스를 확인하려면 다음 명령을 사용합니다:

SELECT DATABASE();

예시 출력:

+------------+
| DATABASE() |
+------------+
| my_database |
+------------+

3.4 데이터베이스 삭제

더 이상 필요하지 않은 데이터베이스를 삭제하려면 DROP DATABASE 명령을 사용합니다.

DROP DATABASE my_database;

3.4.1 삭제 전 중요한 주의사항

  • 주의: 데이터베이스를 삭제하면 모든 데이터가 사라집니다!
  • 실수로 인한 오류를 방지하려면 IF EXISTS 를 추가할 수 있습니다.
    DROP DATABASE IF EXISTS my_database;
    

이 명령은 my_database가 존재하지 않아도 오류 없이 완료됩니다.

3.5 일반 오류 및 해결 방법

3.5.1 “Access denied for user” 오류

예시 오류:

ERROR 1044 (42000): Access denied for user 'user_name'@'localhost' to database 'my_database'
해결 방법
  • GRANT 명령을 사용하여 권한을 부여합니다
    GRANT ALL PRIVILEGES ON my_database.* TO 'user_name'@'localhost';
    FLUSH PRIVILEGES;
    

3.5.2 “Can’t drop database” 오류

예시 오류:

ERROR 1010 (HY000): Error dropping database (can't rmdir './my_database', errno: 39)
해결 방법
  • MySQL을 재시작합니다
    sudo systemctl restart mysql
    
  • 먼저 my_database의 모든 테이블을 삭제한 후 DROP DATABASE 를 실행합니다.

3.6 요약

이 섹션에서는 데이터베이스를 생성, 선택, 나열 및 삭제하는 방법을 배웠습니다.

4. 테이블 작업

After creating a database, you need to create tables inside it to organize data. A table is like a grid for storing data, consisting of columns and rows (records).

데이터베이스를 만든 후에는 데이터를 정리하기 위해 테이블을 생성해야 합니다. 테이블은 열과 행(레코드)으로 구성된 데이터 저장용 그리드와 같습니다.

In this section, we will explain basic operations such as creating, checking, listing, and deleting tables in detail.

이 섹션에서는 테이블 생성, 확인, 목록 조회, 삭제와 같은 기본 작업을 자세히 설명합니다.

4.1 Creating a Table

4.1 테이블 생성

To create a table, use the CREATE TABLE command. If you run the following SQL, it creates a table named users.

테이블을 생성하려면 CREATE TABLE 명령을 사용합니다. 다음 SQL을 실행하면 users라는 테이블이 생성됩니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.1.1 Explanation of each element when creating a table

4.1.1 테이블 생성 시 각 요소 설명

  • id INT AUTO_INCREMENT PRIMARY KEY
  • id 열은 정수(INT)이며 자동 증가(AUTO_INCREMENT)하고 기본 키(PRIMARY KEY)로 설정됩니다.
  • name VARCHAR(50) NOT NULL
  • name 열은 최대 50자 문자열(VARCHAR)이며 NOT NULL 때문에 필수입니다.
  • email VARCHAR(100) UNIQUE NOT NULL
  • email 열은 최대 100자 문자열이며 UNIQUE 제약조건으로 중복 이메일을 방지합니다.
  • created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • created_at 열은 기본값으로 현재 날짜/시간을 자동 설정합니다.
Message when successful
성공 시 메시지
Query OK, 0 rows affected (0.02 sec)

4.2 Checking Table Structure

4.2 테이블 구조 확인

To check the structure of a table you created, use DESC or SHOW COLUMNS.

생성한 테이블의 구조를 확인하려면 DESC 또는 SHOW COLUMNS를 사용합니다.

DESC users;

Or

또는

SHOW COLUMNS FROM users;

Example output:

예시 출력:

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| name       | varchar(50)  | NO   |     | NULL              |                |
| email      | varchar(100) | NO   | UNI | NULL              |                |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

4.3 Listing Tables

4.3 테이블 목록 조회

To list the tables that exist in the current database, run the SHOW TABLES command.

현재 데이터베이스에 존재하는 테이블을 나열하려면 SHOW TABLES 명령을 실행합니다.

SHOW TABLES;

Example output:

예시 출력:

+------------------+
| Tables_in_mydb   |
+------------------+
| users            |
| products         |
| orders           |
+------------------+

4.4 Deleting a Table

4.4 테이블 삭제

To delete a table you no longer need, use the DROP TABLE command.

더 이상 필요하지 않은 테이블을 삭제하려면 DROP TABLE 명령을 사용합니다.

DROP TABLE users;

4.4.1 Important notes when deleting a table

4.4.1 테이블 삭제 시 중요한 주의사항

  • Be careful: deleting a table permanently removes the data!
  • 주의: 테이블을 삭제하면 데이터가 영구적으로 사라집니다!
  • To avoid errors when deleting, add IF EXISTS .
  • 삭제 시 오류를 방지하려면 IF EXISTS 를 추가합니다.
    DROP TABLE IF EXISTS users;
    
Message when successful
성공 시 메시지
Query OK, 0 rows affected (0.01 sec)

4.5 Resetting Table Data (Delete All Rows)

4.5 테이블 데이터 초기화 (전체 행 삭제)

If you want to keep the table structure but delete only the data inside, use TRUNCATE TABLE.

테이블 구조는 유지하고 내부 데이터만 삭제하려면 TRUNCATE TABLE을 사용합니다.

TRUNCATE TABLE users;
Difference from DROP TABLE
DROP TABLE과의 차이점
  • DROP TABLE deletes the table itself.
  • DROP TABLE은 테이블 자체를 삭제합니다.
  • TRUNCATE TABLE deletes only the data and keeps the table structure.
  • TRUNCATE TABLE은 데이터만 삭제하고 테이블 구조는 유지합니다.

4.6 Common Errors and Fixes

4.6 일반적인 오류와 해결 방법

4.6.1 “Table already exists” error

4.6.1 “Table already exists” 오류

Example error:

예시 오류:

ERROR 1050 (42S01): Table 'users' already exists
How to fix
해결 방법
  • Check existing tables
  • 기존 테이블 확인
    SHOW TABLES;
    
  • Create the table with IF NOT EXISTS
  • IF NOT EXISTS를 사용해 테이블 생성
    CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        email VARCHAR(100) UNIQUE NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

4.6.2 “Unknown table” error

4.6.2 “Unknown table” 오류

Example error:

예시 오류:

ERROR 1051 (42S02): Unknown table 'users'
How to fix
해결 방법
  • SHOW TABLES;를 사용하여 테이블이 존재하는지 확인합니다.
  • 존재하지 않을 경우 IF EXISTS를 추가합니다.
    DROP TABLE IF EXISTS users;
    

4.7 요약

이 섹션에서는 기본 MySQL 테이블 작업인 테이블 생성, 확인 및 삭제에 대해 다루었습니다.