테이블 생성 스크립트 뽑아내기
MySQL에 Database를 만들고 두 개의 Table도 만들어 줬습니다.
개발하면서 조금씩 Table도 수정하고 Foreign key도 잡아주고 했습니다.
어느정도 개발이 완료되고 테이블 생성 스크립트를 정리하게 되었습니다.
MySQL 관리에 사용하는 MySQLWorkbench 에서는 Commercial Version에만 그런 기능이 있다고 합니다 저는 Comunity Version이라 메뉴 텝에 보이지도 않습니다.
그래서 mysql 서버에서 명령으로 뽑아보겠습니다.
먼저 mysql 서버에 접속합니다.
$ mysql -u root -p
데이터베이스를 먼저 확인해 봅니다.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ngletest |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
ngletest 라는 database를 사용하고 있습니다. use 명령으로 ngletest를 지정합니다.
mysql> use ngletest;
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
이번엔 ngletest 안에 있는 table을 확인해 줍니다.
mysql> show tables;
+--------------------+
| Tables_in_ngletest |
+--------------------+
| UserInfo |
| UserProfile |
+--------------------+
2 rows in set (0.00 sec)
테이블 생성 스크립트를 만들어보겠습니다.
show create table <테이블 이름>\G
\G 옵션을 붙이면 테이블 형식이 아닌 읽기 편한 형식으로 출력됩니다.
mysql> show create table UserInfo\G
*************************** 1. row ***************************
Table: UserInfo
Create Table: CREATE TABLE `UserInfo` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`email` varchar(30) NOT NULL,
`password` char(64) NOT NULL,
`accesstoken` char(64) DEFAULT NULL,
`logindate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`userid`),
UNIQUE KEY `userid_UNIQUE` (`userid`),
UNIQUE KEY `email_UNIQUE` (`email`),
UNIQUE KEY `accesstoken_UNIQUE` (`accesstoken`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=latin1
1 row in set (0.01 sec)
UserProfile 테이블도 확인해 줍니다.
mysql> show create table UserProfile\G
*************************** 1. row ***************************
Table: UserProfile
Create Table: CREATE TABLE `UserProfile` (
`userid` int(11) NOT NULL,
`phone` varchar(20) DEFAULT '',
`address` varchar(120) DEFAULT '',
`level` int(11) DEFAULT '0',
`grade` int(11) DEFAULT '0',
`photofile` varchar(20) DEFAULT '',
`hello` varchar(200) DEFAULT '',
PRIMARY KEY (`userid`),
UNIQUE KEY `userid_UNIQUE` (`userid`),
CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `UserInfo` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.01 sec)
이번에는 mysqldump를 이용해 mysql에 직접 연결하지 않고 테이블 생성 스크립트를 뽑아보겠습니다.
테이블 생성 스크립트만 뽑아내고 싶다면 --no-dat 옵션을 붙여줍니다.
mysqldump --no-data --user=root --password --host=localhost ngletest UserInfo
$ mysqldump --no-data --user=root --password --host=localhost ngletest UserInfo
Enter password:
-- MySQL dump 10.13 Distrib 5.6.43, for Linux (x86_64)
--
-- Host: localhost Database: ngletest
-- ------------------------------------------------------
-- Server version 5.6.43
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `UserInfo`
--
DROP TABLE IF EXISTS `UserInfo`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `UserInfo` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`email` varchar(30) NOT NULL,
`password` char(64) NOT NULL,
`accesstoken` char(64) DEFAULT NULL,
`logindate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`userid`),
UNIQUE KEY `userid_UNIQUE` (`userid`),
UNIQUE KEY `email_UNIQUE` (`email`),
UNIQUE KEY `accesstoken_UNIQUE` (`accesstoken`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-04-15 3:36:02
동일하게 UserProfile 테이블 스크립트도 확인해 봅니다.
$ mysqldump --no-data --user=root --password --host=localhost ngletest UserProfile
Enter password:
-- MySQL dump 10.13 Distrib 5.6.43, for Linux (x86_64)
--
-- Host: localhost Database: ngletest
-- ------------------------------------------------------
-- Server version 5.6.43
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `UserProfile`
--
DROP TABLE IF EXISTS `UserProfile`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `UserProfile` (
`userid` int(11) NOT NULL,
`phone` varchar(20) DEFAULT '',
`address` varchar(120) DEFAULT '',
`level` int(11) DEFAULT '0',
`grade` int(11) DEFAULT '0',
`photofile` varchar(20) DEFAULT '',
`hello` varchar(200) DEFAULT '',
PRIMARY KEY (`userid`),
UNIQUE KEY `userid_UNIQUE` (`userid`),
CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `UserInfo` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-04-15 3:28:13
mysqldump로 실행했을 때 아래와 같은 주석들이 많이 보입니다.
/*!40101 SET NAMES utf8 */;
버전에 따라 설정을 적용하라는 의미로 40101일 경우 mysql(또는 mysqldump) 버전이 4.1.1 이전 버전일 경우 적용해 줍니다.
저는 현재 5.6.43 버전입니다. 그러니 무시해도 될 것 같습니다.
$ mysql -V
mysql Ver 14.14 Distrib 5.6.43, for Linux (x86_64) using EditLine wrapper
여기까지 MySQL에서 테이블 생성 스크립트 뽑아내는 방법이었습니다.