테이블을 만들거나 데이터를 넣을 때 직접 입력해도 되지만,
외부에 있는 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
문까지 잘 실행된 모습을 볼 수 있다.