MySQL - Running SQL Files. (SQL 파일을 적용(?)시키는 법)

임재현·2021년 4월 29일
0

MySQL

목록 보기
13/52
post-custom-banner

테이블을 만들거나 데이터를 넣을 때 직접 입력해도 되지만,
외부에 있는 SQL파일들을 적용시키고 싶거나, 해야할 때가 있다. 그럴 때 이 방법을 사용한다.

mysql> show tables;
Empty set (0.00 sec)

먼저 테이블이 없는 database가 있다.

mysql> exit;
Bye
limjaehyeon@imjaehyeon-ui-MacBookPro datas % touch first_file.sql

SQL을 빠져나와서 fist_file.sql이라는 파일을 새로 만들어줬다.

CREATE TABLE cats
        (
                cat_id INT NOT NULL AUTO_INCREMENT,
                name VARCHAR(100),
                age INT,
                PRIMARY KEY(cat_id)
        );

                                                 
~                                                          
~                                                          
:wq

그 후 vim에디터로 위의 내용을 입력해줬다. (꼭 vim을 사용할 필요없다. 아무걸로나 내용 입력해주면 됨)
다시 mysql에 접속하고 데이터베이스를 선택해준다. 그리고, SOURCE <파일 디렉토리>를 입력해준다.

limjaehyeon@imjaehyeon-ui-MacBookPro datas % mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------------+
| Database                 |
+--------------------------+
| cat_app                  |
| ETON_fake_db             |
| ETON_local_db            |
| information_schema       |
| laggard_project          |
| learnmysql               |
| myDB                     |
| sequelize_db             |
| sequelizeT               |
| sys                      |
| testDB                   |
+--------------------------+
20 rows in set (0.01 sec)


mysql> use cat_app;
Database changed
mysql> SOURCE first_file.sql;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+-------------------+
| Tables_in_cat_app |
+-------------------+
| cats              |
+-------------------+
1 row in set (0.00 sec)

mysql> desc cats;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| cat_id | int          | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | YES  |     | NULL    |                |
| age    | int          | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

정상적으로 first_file.sql 파일안에 써있는 명령어들이 실행되어 테이블이 만들어 진 모습을 볼 수 있다.
다시 mysql을 빠져나와서 이번에는 데이터를 넣어보자.

mysql> exit;
Bye
limjaehyeon@imjaehyeon-ui-MacBookPro datas % mkdir testing;
limjaehyeon@imjaehyeon-ui-MacBookPro datas % ls
first_file.sql	testing
limjaehyeon@imjaehyeon-ui-MacBookPro datas % cd testing 
limjaehyeon@imjaehyeon-ui-MacBookPro testing % touch insert.sql
limjaehyeon@imjaehyeon-ui-MacBookPro testing % vim insert.sql

mkdir을 통해 폴더(디렉토리)를 하나 새로 만들어주고 그 안에 insert.sql이라는 파일을 하나 만들어줬다.
insert.sql 파일에 데이터 입력 명령어(INSERT INTO)를 입력해준다.

INSERT INTO cats(name, age)
VALUES ('Charlie', 17);

INSERT INTO cats(name, age)
VALUES ('Connie', 10);

SELECT * FROM cats;

~                                                          
~                                                          
                                              
:wq

그리고 다시 mysql 접속, 아까 사용했던 데이터베이스 선택.(USE <DATABASE>).
여기서 주의할 건 파일의 위치. MySQL을 어디서 실행시켰느냐에 따라서 SOURCE뒤에 붙는 파일 디렉토리의 위치를 잘 설정해줘야 한다.(물론 절대경로를 사용하면 괜찮긴하다. 여기서는 상대경로를 쓸 때로 가정)
나는 testing 이라는 폴더를 나와서 처음 디렉토리로 돌아가서 MySQL을 실행시켰다.

limjaehyeon@imjaehyeon-ui-MacBookPro testing % cd ..
limjaehyeon@imjaehyeon-ui-MacBookPro datas % ls  
first_file.sql	testing
limjaehyeon@imjaehyeon-ui-MacBookPro datas % mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.23 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use cat_app;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_cat_app |
+-------------------+
| cats              |
+-------------------+
1 row in set (0.01 sec)

mysql> select * from cats;
Empty set (0.00 sec)

mysql> SOURCE testing/insert.sql
Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.01 sec)

+--------+---------+------+
| cat_id | name    | age  |
+--------+---------+------+
|      1 | Charlie |   17 |
|      2 | Connie  |   10 |
+--------+---------+------+
2 rows in set (0.00 sec)

INSERT INTO가 잘 실행되었고 마지막에 적어놓은 SELECT문까지 잘 실행된 모습을 볼 수 있다.

profile
임재현입니다.
post-custom-banner

0개의 댓글