치춘짱베리굿나이스

MySQL Workbench 사용해보기 본문

ServerSide/Database

MySQL Workbench 사용해보기

치춘 2022. 9. 28. 19:50

MySQL Workbench

개요

아까까진 ERDCloud 썼잖아

ERDCloud를 쓰다가 여러가지 부분에서 불편함을 느껴 Workbench로 건너왔다

가장 불편했던 부분은 확대 - 축소가 통상적인 제스처와 달라서 계속 화면이 주체가 안될 정도로 커졌다 작아졌다 하는 부분이랑 뒤로가기 단축키가 적용이 안 된다는 점, 쿼리를 export하면 복잡한 형태로 제공돼서 후가공을 거쳐야 한다는 점 등이 있었다

그리고 지금 데이터베이스 관리 시스템으로 MySQL을 쓰고 있으니 바로 데이터베이스도 만들고 ERD도 추출하는 것이 적절하게 느껴졌다

다운로드

MySQL :: Begin Your Download

 

MySQL :: Begin Your Download

The world's most popular open source database Contact MySQL  |  Login  |  Register

dev.mysql.com

윈도우는 설치 작업 중에 이것저것 설정해줘야 하는데 맥은 그런 거 없이 dmg 파일 열어서 응용 프로그램 폴더로 옮겨두면 끝이다

나는 맥이라 윈도우의 설치 과정은 적을 수 없다…

사용해보기

MySQL 서버와 연결하기

처음 화면이다

아래에 MySQL을 감지할 수 없다고 나온다

MySQL 서버를 꺼놨기 때문으로, 얼른 켜주자 → mysql.server start

서버를 켠 뒤 Rescan servers를 클릭하면 알아서 열려있는 서버 인스턴스가 존재하는지 다시 스캔하며, 이번에는 정상적으로 3306 포트에 열린 서버를 감지해주었다

 

클릭하면 로그인 팝업이 뜨며, 비밀번호를 입력하고 로그인을 해주자

 

GUI로 서버에 잘 접속했다

이게뭐야!!! 뭐가 뭔지 하나도 못 알아듣겠다

정상이다 처음 써봤으니까 어쩔 수 없다…

각 탭 설명

간단한 테이블 생성하기

create database if not exists testDB;
use testDB;
CREATE TABLE IF NOT EXISTS test_table (
    id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    created_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

이 SQL 명령을 명령문 입력창에 넣는다

  1. 데이터베이스 testDB를 생성 (존재하지 않을 때만)
  2. testDB 사용하기 (앞으로 입력하는 모든 명령은 testDB에 적용)
  3. 테이블 test_table 생성 (존재하지 않을 때만)
    • id는 정수형으로, null이 올 수 없고, 자동 증가
    • name은 길이 20의 문자열으로, null이 올 수 없음
    • created_time은 타임스탬프로, 레코드가 생성될 때마다 자동으로 지정되고 (DEFAULT CURRENT_TIMESTAMP), null이 올 수 없음

참고로 데이터베이스 이름이나 테이블 이름은 대소문자를 구분하지 않으므로 testDBtestdb나 별로 차이가 없다… 카멜케이스가 습관이 되어버려서 이렇다

 

번개 아이콘을 클릭하면 이상의 모든 명령줄을 다 실행해준다

 

정상적으로 실행되었다면 결과로 초록 체크를 볼 수 있다

경고가 하나 출력되는 것은… 이미 testDB를 만들어 놓은 상태에서 create database를 한번 더 입력했기 때문이다

 

SCHEMAS 탭의 오른쪽 구석 새로고침 버튼을 누르자

 

스키마 탭에 방금 생성한 테이블의 구조가 잘 출력되는 것을 볼 수 있다

 

insert into test_table (name) values ("name");
select * from TEST_TABLE;

이번엔 테이블에 레코드를 추가해 보자

idauto_increment이므로 0부터 하나씩 늘어나고, created_time은 기본값을 지정해 주었으므로 값을 따로 지정해줄 필요가 없어 name 컬럼에 대한 데이터만 설정해 주었다

 

이전에 레코드를 하나 추가했었으므로 2개의 레코드 (로우) 가 반환되었다

 

결과도 테이블 형식으로 잘 출력되는 것을 볼 수 있다

이처럼 이전에 CLI 환경에서 쿼리문 하나씩 적었듯이 입력창에 쿼리 명령문을 적고 번개 아이콘으로 execute만 하면 쉽게 데이터베이스를 조작할 수 있다

키워드 자동완성도 돼서 insert to인지 insert into인지 헷갈리거나… 그런 상황에 요긴하게 쓸 수도 있다

GUI로 데이터 추가하기

좌측의 이 탭들을 선택하면 테이블에 데이터를 추가할 수 있다

 

Result Grid는 표 형식으로, 맨 마지막 줄의 NULL 필드들을 클릭하여 값을 null이 아닌 다른 값으로 변경해주는 것으로 로우 추가가 가능하다

맨 마지막줄의 필드를 클릭하면 값을 수정할 수 있으며, 새로운 로우가 생성된다

default 값이 지정되어 있는 필드는 굳이 수정 안 해줘도 나중에 apply 할 때 기본값이 들어간다

 

Form Editor은 폼 형식으로, 폼을 채워나가는 방식으로 데이터를 추가할 수 있다

마찬가지로 default 값이 지정되어 있는 필드는 건드릴 필요 없다

Form Editor와 Result Grid에서 추가 / 삭제한 필드 정보는 서로 상호호환된다

 

필드 또는 레코드를 추가, 삭제, 수정한 후 Apply를 누르면 작업 내용을 테이블에 반영할 수 있다

Revert를 누르면 처음 상태 (테이블에 저장되어 있는 상태) 로 복구된다

 

Apply 버튼을 누르면 나 이 명령어들 써서 너 테이블 수정할 건데 ㄱㅊ?? 이라는 팝업을 띄운다

위에서 우리가 추가, 삭제, 수정한 내역들이 SQL 쿼리 명령으로 표현되는 것을 볼 수 있다

GUI로 데이터를 조작했지만 내부적으로는 CLI 환경에서와 마찬가지로 명령을 사용해서 데이터를 조작하는 것을 알 수 있는 대목이다

 

이 명령들을 직접 수정할 수도 있다

막상 명령어들을 보니 맘에 안드는 부분이 있거나, 빼고 싶은 명령이 있다면 조작해주면 된다

조작이 끝나면 팝업의 Apply 버튼을 눌러준다

 

그러면 SQL 명령들이 실행되고, 데이터들이 테이블에 반영된다

 

테이블을 보면 값이 제대로 추가된 것을 볼 수 있다

idcreated_time은 기본값이 지정되어 있으므로 앞에서 굳이 값을 설정하지 않아도 자동으로 값이 입력되었다

이미 존재하는 데이터베이스로 ERD 만들기

사실 내가 MySQL 워크벤치로 옮겨온 이유는 데이터베이스를 만들면서 ERD까지 한번에 추출하고 싶기 때문이었다

아까 만든 테스트 데이터베이스 스키마로 ERD를 그려보자

 

최상단 메뉴에서 Reverse Engineer를 클릭한다

MySQL Workbench에서는 모델을 생성하여 ERD를 그릴 수 있는데, 이미 존재하는 데이터베이스를 모델 형식으로 리버스 엔지니어링을 통해 변환해서 ERD를 생성하기 때문에 이 과정을 거치는 것 같다

 

필드를 채워준다

MySQL 서버와의 연결을 위한 정보들이다

아까 워크벤치를 켜면서 연결을 해줬던 것 같지만? 또 해줘야 한다

다 입력하고 continue를 누른다

 

정보를 정상적으로 입력했다면 연결에 성공하고 데이터베이스로부터 스키마 리스트를 가져왔다고 로그를 띄워준다

실패했다면 실패 로그를 출력한다

지금은 성공했으므로 계속 continue를 누른다

 

리버스 엔지니어링을 적용할 데이터베이스 스키마를 선택한다

아까 생성한 testDB를 고르고, continue를 누른다

 

스키마 내의 객체들을 잘 가져왔다고 한다

continue를 누른다

 

스키마 내의 객체 중 리버스 엔지니어링을 적용할 객체를 고르자

아까 만들었던 testDB는 view도 없고 프로시저도 함수도 없는 단순 테이블 1개 뿐이므로 선택지가 하나밖에 없다

선택하고 execute를 눌러 리버스 엔지니어링을 실행하자

 

테이블도 하나밖에 없고 컬럼도 적어서 리버스 엔지니어링이 순식간에 끝났다

선택한 객체에 리버스 엔지니어링이 잘 적용되었고, 다이어그램에 객체를 성공적으로 표현했다고 한다

continue를 누른다

 

리버스 엔지니어링 결과를 출력한다

어떤 객체가 리버스 엔지니어링 적용되었는지 알 수 있다

close를 눌러 창을 닫자

 

테이블이 생성되었다

어디서 많이 본 생김새의 테이블인데, 거꾸로 말하자면 ERD 예시로 자주 보이던 이 디자인이 MySQL 워크벤치를 통해 만들어졌다고 볼 수 있다

ERD 조작하기

왼쪽 툴바의 역할은 이와 같다

UI가 ERDCloud와 비슷한 것을 볼 수 있다 (사실 워크벤치가 먼저일 수도 있다)

간단한 테이블 조작에서는 뷰나 루틴까지는 필요없고 연결선과 테이블 추가만 많이 쓰게 될 것이다

테이블을 생성해 보자

 

슥 하고 삭 하면 테이블이 생성된다

아무런 컬럼도 없지만.. 아무튼 테이블이다

 

테이블을 두 번 클릭하면 하단에 컬럼을 추가할 수 있는 탭이 등장한다

위의 표에서는 각 속성을 더블클릭하여 추가할 수 있고, 아래의 폼에서 각 필드에 값을 입력하여 수정할 수도 있다

 

테이블 2개를 만들었다

별 건 없고 그냥 정말 간단한 테이블이다

 

테이블 2개를 이을 때는 ERDCloud 때처럼 테이블을 순서대로 클릭해주면 된다

주의할 점은, 새발이 향하는 테이블 (자식 테이블) 을 먼저 클릭해줘야 한다

ERDCloud는 순서가 반대였기 때문에 조금 헷갈린다

새발 연결이 되면 FK도 자동으로 추가된다

 

식별관계 연결선 (실선) 과 비식별관계 연결선 (점선) 이 따로 구분되어 있기 때문에 주의하자

각각의 경우 추가된 FK의 아이콘이 다르다

여담

간단한 테이블 조작까지는 크게 어렵지 않아 프로그램만 몇 번 만져보면 쉽게 파악할 수 있다

어려운 기능은… SQL의 기능을 전부 다 아는 게 아니라서 아직 보지 않았다 (ㅋㅋㅋ)


참고자료

https://enterone.tistory.com/180

https://blog.naver.com/PostView.naver?blogId=ajdkfl6445&logNo=221540488900&parentCategoryNo=&categoryNo=30&viewDate=&isShowPopularPosts=true&from=search

'ServerSide > Database' 카테고리의 다른 글

ERD 그려보기 with ERDCloud  (0) 2022.09.27
Identifying / Non-Identifying Relationship  (0) 2022.09.27
ERD  (0) 2022.09.27
MySQL (Express와 함께)  (0) 2022.09.14
DBMS  (0) 2022.09.10
Comments