CS과목/데이터베이스

[CS과목/데이터베이스] MySQL 실습1

johyeongseob 2025. 4. 21. 16:53

2025-1 데이터베이스 (CSC4009-01) prof. 이우진

학교 서버 접속

C:\Users\[Nickname]>ssh [2024120418]@[접속할 서버 주소] -p [포트 번호]

> ssh : ssh 클라이언트 프로그램. 원격 컴퓨터에 접속할 때 사용

MySQL 접속

[2024120418]@linuxserver1:~$ mysql -u DB_[2024120418] -p

> mysql: MySQL 클라이언트 프로그램 실행
> u DB_[2024120418]: 사용자 이름(User)을 DB_[2024120418]으로 설정해서 로그인
> -p: 비밀번호를 입력하겠다는 의미

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| DB_2024120418      |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

> MySQL 서버에 존재하는 데이터베이스 목록을 보여줘!

mysql> USE DB_2024120418
Database changed

> 이제부터 너가 실행하는 SQL 명령어들은 DB_2024120418 데이터베이스를 기준으로 처리할게!

실습1: 테이블 생성

mysql> CREATE TABLE 제품 (
    -> 제품번호 CHAR(3) NOT NULL,
    -> 제품명 VARCHAR(20),
    -> 재고량 INT,
    -> 단가 INT,
    -> 제조업체 VARCHAR(20),
    -> PRIMARY KEY(제품번호),
    -> CHECK (재고량 >=0 AND 재고량 <= 10000)
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE 주문 (
    -> 주문번호 CHAR(3) NOT NULL,
    -> 주문고객 VARCHAR(20),
    -> 주문제품 CHAR(3),
    -> 수량 INT,
    -> 배송지 VARCHAR(30),
    -> 주문일자 DATE,
    -> PRIMARY KEY(주문번호)
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE 고객 (
    ->   고객아이디 VARCHAR(20) NOT NULL,
    ->   고객이름   VARCHAR(10) NOT NULL,
    ->   나이       INT,
    ->   등급       VARCHAR(10) NOT NULL,
    ->   직업       VARCHAR(20),
    ->   적립금     INT DEFAULT 0,
    ->   PRIMARY KEY (고객아이디)
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE 배송업체 (
    -> 업체번호 CHAR(3) NOT NULL,
    -> 업체명 VARCHAR(20),
    -> 주소 VARCHAR(100),
    -> 전화번호 VARCHAR(20),
    -> PRIMARY KEY(업체번호)
    -> );
Query OK, 0 rows affected (0.01 sec)

> 제품 테이블 생성
> NOT NULL: 비워둘 수 없다는 제약 조건
> VARCHAR: 가변 길이 문자
> PRIMARY KEY: 기본키
> 행 끝은 , 포함. 마지막 행 끝은 , 미포함
> ';' : 명령어의 끝을 알리는 중요한 문법적 표시

실습2: 테이블 구조 확인

mysql> DESC 주문;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 주문번호     | char(3)     | NO   | PRI | NULL    |       |
| 주문고객     | varchar(20) | YES  |     | NULL    |       |
| 주문제품     | char(3)     | YES  |     | NULL    |       |
| 수량         | int         | YES  |     | NULL    |       |
| 배송지       | varchar(30) | YES  |     | NULL    |       |
| 주문일자     | date        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

실습3: 테이블 변경-컬럼 추가

mysql> ALTER TABLE 고객 ADD 가입날짜 DATE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC 고객;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| 고객아이디      | varchar(20) | NO   | PRI | NULL    |       |
| 고객이름        | varchar(10) | NO   |     | NULL    |       |
| 나이            | int         | YES  |     | NULL    |       |
| 등급            | varchar(10) | NO   |     | NULL    |       |
| 직업            | varchar(20) | YES  |     | NULL    |       |
| 적립금          | int         | YES  |     | 0       |       |
| 가입날짜        | date        | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

 

실습4: 테이블 변경-컬럼 삭제

mysql> ALTER TABLE 고객 DROP COLUMN 가입날짜;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC 고객;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| 고객아이디      | varchar(20) | NO   | PRI | NULL    |       |
| 고객이름        | varchar(10) | NO   |     | NULL    |       |
| 나이            | int         | YES  |     | NULL    |       |
| 등급            | varchar(10) | NO   |     | NULL    |       |
| 직업            | varchar(20) | YES  |     | NULL    |       |
| 적립금          | int         | YES  |     | 0       |       |
+-----------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

 

실습5: 테이블 변경-제약조건 추가/삭제

mysql> ALTER TABLE 고객
    -> ADD CONSTRAINT CHK_AGE CHECK (나이 >= 20);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM information_schema.table_constraints
    -> WHERE table_name = '고객';
+--------------------+-------------------+-----------------+---------------+------------+-----------------+----------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA  | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED |
+--------------------+-------------------+-----------------+---------------+------------+-----------------+----------+
| def                | DB_2024120418     | PRIMARY         | DB_2024120418 | 고객       | PRIMARY KEY     | YES      |
| def                | DB_2024120418     | CHK_AGE         | DB_2024120418 | 고객       | CHECK           | YES      |
+--------------------+-------------------+-----------------+---------------+------------+-----------------+----------+
2 rows in set (0.00 sec)

 

실습6: 테이블 삭제

mysql> DROP TABLE 배송업체;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW TABLES;
+-------------------------+
| Tables_in_DB_2024120418 |
+-------------------------+
| 고객                    |
| 제품                    |
| 주문                    |
+-------------------------+
3 rows in set (0.00 sec)