지금까지 MySQL을 통해 DB를 제작하고, 테이블을 생성해서 그 안에 데이터를 집어넣고 다루는 일을 자주 해왔다. SQL에는 테이블 이외에도 가상의 테이블 혹은 뷰같은 기능이 많기에 이를 살피기 전에 테이블을 상세하게 공부하고자 한다.
먼저 테이블을 제작하는 것은 구성 설계를 마치면 큰 어려움 없이 만들 수 있다. 문제점은 테이블을 설계하는 것이 복잡하고 테이블 간의 관계를 고려하여 효율적인 테이블을 구상하는 것이 어렵다는 것이다. 이번에는 테이블 생성과 데이터 입력을 공부할 것이기 때문에 매번 사용하는 sqldb의 테이블 설계를 참고하여 제작하는 방법을 알아보고 테이블의 상세한 기능들은 차후에 보도록 하자.
| usertbl | |||||||
| 아이디 | 이름 | 생년 | 지역 | 국번 | 전화번호 | 키 | 가입일 |
| LSG | 이승기 | 1987 | 서울 | 011 | 11111111 | 182 | 2008.08.08 |
| KBS | 김범수 | 1979 | 경남 | 011 | 22222222 | 173 | 2012.04.04 |
| KKH | 김경호 | 1971 | 전남 | 019 | 33333333 | 177 | 2007.07.07 |
| JYP | 조용필 | 1950 | 경기 | 011 | 44444444 | 166 | 2009.04.04 |
| SSK | 성시경 | 1979 | 서울 | 186 | 2013.12.12 | ||
| LJB | 임재범 | 1963 | 서울 | 016 | 66666666 | 182 | 2009.09.09 |
| YJS | 윤종신 | 1969 | 경남 | 170 | 2005.05.05 | ||
| EJW | 은지원 | 1978 | 경북 | 011 | 88888888 | 174 | 2014.03.03 |
| JKW | 조관우 | 1965 | 경기 | 018 | 99999999 | 172 | 2010.10.10 |
| BBK | 바비킴 | 1973 | 서울 | 010 | 00000000 | 176 | 2013.05.05 |
| buytbl | |||||
| 순번 | 아이디 | 물품명 | 분류 | 단가 | 수량 |
| 1 | KBS | 운동화 | 30 | 2 | |
| 2 | KBS | 노트북 | 전자 | 1000 | 1 |
| 3 | JYP | 모니터 | 전자 | 200 | 1 |
| 4 | BBK | 모니터 | 전자 | 200 | 5 |
| 5 | KBS | 청바지 | 의류 | 50 | 3 |
| 6 | BBK | 메모리 | 전자 | 80 | 10 |
| 7 | SSK | 책 | 서적 | 15 | 5 |
| 8 | EJW | 책 | 서적 | 15 | 2 |
| 9 | EJW | 청바지 | 의류 | 50 | 1 |
| 10 | BBK | 운동화 | 30 | 2 | |
| 11 | EJW | 책 | 서적 | 15 | 1 |
| 12 | BBK | 운동화 | 30 | 2 | |
MySQL에서는 테이블을 만들기 위해서 간단히 몇번의 클릭으로 테이블을 생성하고 데이터를 넣을 수 있다. 먼저 CREATE DATABASE...를 통해 DB를 생성하고 설명을 따라가자(DB 이름은 기존에 있는 것과 겹치면 안 된다). 워크밴치의 좌측에 Navigator 탭에서 테이블을 만드려는 DB를 선택하고 Tables 카테고리를 우클릭 한다.

'Create Table...'을 클릭하면 테이블을 생성하는 창이 팝업된다.

Table Name에 테이블 이름, Column Name에 열 이름을 넣고 세부 설정을 입력하면 Apply를 누른다. 그러면 바로 생성되는 것이 아닌 테이블 생성 쿼리를 확인시켜주는데, 여기서 마지막으로 본인이 원하는 설정을 수정할 수 있다. 확인을 마친 후에는 또 Apply 버튼을 누르고 오류가 없을 시에는 Finish 버튼을 누르면 끝이다.
이와 비슷하게 데이터 입력도 워크밴치의 툴을 사용해 진행하는 방법을 살펴보자.

Tables를 펼치면 테이블들이 나오는데, 이 중에서 데이터를 추가할 테이블을 우클릭한 후에 Select Rows 혹은 Select Rows - Limit 1000을 클릭하면 해당 테이블을 열람하는 쿼리와 함께 테이블이 펼쳐진다.

본인은 이미 테이블을 만들었기 때문에 행들이 존재하지만 새로운 테이블을 만들어 이 단계에 들어왔다면 아무것도 없이 모든 열에 NULL만 있는 테이블이 뜰 것이다. 각 열에 데이터 형식에 맞는 값을 기입하고 Apply를 누르면 테이블 생성과 동일하게 데이터 입력 쿼리를 재차 확인시켜주고 수정할 것이 있으면 수정한 후에 Apply를 눌러 데이터 입력을 마친 뒤 오류가 없으면 Finish로 끝내면 된다.
굉장히 간편하게 SQL 없이 MySQL8.0 워크밴치에 있는 툴을 사용해 클릭으로만 테이블을 생성하고 데이터를 입력하는 방식을 배워봤다. 쉽고 간편하기 때문에 SQL로 하는 것이 불필요하다 느껴질 수 있다. 하지만, 이 방식이 모든 DBMS에서 동일하게 사용되는 방식이 아니기도 하며, SQL이 익숙해진다면 쿼리문으로 만드는 것이 더 편리하고 유연하다는 것을 알게될 것이다. SQL로 테이블 생성과 데이터 입력을 보자.
DROP DATABASE tabledb ;
CREATE DATABASE tabledb ; -- 일차적으로 DB 생성
-- sqldb에 있는 usertbl과 buytbl을 만들며 세세히 제작방법을 배워보자
USE tabledb ;
DROP TABLE IF EXISTS buytbl, usertbl ;
CREATE TABLE usertbl -- 회원 테이블
( userID CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디
name VARCHAR(10) NOT NULL, -- 사용자 이름
birthYear INT NOT NULL, -- 출생년도
addr CHAR(2) NOT NULL, -- 지역 경기, 서울, 경남 등으로 단어만 입력
mobile1 CHAR(3) NULL, -- 휴대폰의 국번(011, 016, 017, 018 등)
mobile2 CHAR(8) NULL, -- 휴대폰의 나머지 번호 하이픈 제외 8자리
height SMALLINT NULL, -- 키
mDate DATE NULL -- 회원 가입일
);
CREATE TABLE buytbl -- 구매 테이블
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
userid CHAR(8) NOT NULL, -- 아이디(FK)
prodName CHAR(6) NOT NULL, -- 물품명
groupName CHAR(4) NULL, -- 분류
price INT NOT NULL, -- 단가
amount SMALLINT NOT NULL, -- 수량
FOREIGN KEY (userid) REFERENCES usertbl (userID)
);
/* <주의할 점>
먼저 세부설정을 제외하고 테이블의 열과 데이터 형을 SQL로 작성해서 구조를 만든다.
NOT NULL은 데이터 타입 뒤에 표기하고 아무것도 적지 않을 시에는 디폴트로 NULL로 설정된다.
PK는 NULL 여부 다음에 기입하고, 자동으로 숫자를 늘려주는 AUTO_INCREMENT를 설정한 열의 경우
PRIMARY KEY나 UNIQUE로 지정해줘야 한다.
FK는 모든 열을 지정한 후에 ','를 넣고 다음에 설정해줘야 한다. */
자주 사용했던 방식이라 익숙할 것이다. 쿼리문의 마지막에 넣은 주의사항을 잘 숙지하고 있어야지 오류를 피하고 원하는 테이블을 수월하게 만들 수 있을 것이다. 다음으로 데이터 입력은 INSERT INTO...를 사용하자.
-- 데이터 입력
INSERT INTO usertbl VALUES('LSG', '이승기', 1987, '서울', '011', '11111111', 182, '2008-8-8') ;
INSERT INTO usertbl VALUES('KBS', '김범수', 1979, '경남', '011', '22222222', 173, '2012-4-4') ;
INSERT INTO usertbl VALUES('KKH', '김경호', 1971, '전남', '019', '33333333', 177, '2007-7-7') ;
INSERT INTO buytbl VALUES(NULL, 'KBS', '운동화', NULL, 30, 2) ;
INSERT INTO buytbl VALUES(NULL, 'KBS', '노트북', '전자', 1000, 1) ;
INSERT INTO buytbl VALUES(NULL, 'JYP', '모니터', '전자', 200, 1) ; -- FK에 해당하는 userid에 usertbl에 존재하지 않는 값이 입력돼 오류가 발생한다. 나머지 정보를 입력하고 다시 기입하자.
-- 나머지 데이터
INSERT INTO usertbl VALUES('JYP', '조용필', 1950, '경기', '011', '44444444', 166, '2009-4-4') ;
INSERT INTO usertbl VALUES('SSK', '성시경', 1979, '서울', NULL, NULL, 186, '2013-12-12') ;
INSERT INTO usertbl VALUES('LJB', '임재범', 1963, '서울', '016', '66666666', 182, '2009-9-9') ;
INSERT INTO usertbl VALUES('YJS', '윤종신', 1969, '경남', NULL, NULL, 170, '2005-5-5') ;
INSERT INTO usertbl VALUES('EJW', '은지원', 1978, '경북', '011', '88888888', 174, '2014-3-3') ;
INSERT INTO usertbl VALUES('JKW', '조관우', 1965, '경기', '018', '99999999', 172, '2010-10-10') ;
INSERT INTO usertbl VALUES('BBK', '바비킴', 1973, '서울', '010', '00000000', 176, '2013-5-5') ;
INSERT INTO buytbl VALUES(NULL, 'JYP', '모니터', '전자', 200, 1) ;
INSERT INTO buytbl VALUES(NULL, 'BBK', '모니터', '전자', 200, 5) ;
INSERT INTO buytbl VALUES(NULL, 'KBS', '청바지', '의류', 50, 3) ;
INSERT INTO buytbl VALUES(NULL, 'BBK', '메모리', '전자', 80, 10) ;
INSERT INTO buytbl VALUES(NULL, 'SSK', '책', '서적', 15, 5) ;
INSERT INTO buytbl VALUES(NULL, 'EJW', '책', '서적', 15, 2) ;
INSERT INTO buytbl VALUES(NULL, 'EJW', '청바지', '의류', 50, 1) ;
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL, 30, 2) ;
INSERT INTO buytbl VALUES(NULL, 'EJW', '책', '서적', 15, 1) ;
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL, 30, 2) ;
실습 과정 중에 일부러 FK의 데이터가 일치하지 않는 상황을 연출해 일부러 오류를 내봤다. FK로 연결된 키 중에서 외래 테이블에 해당 데이터가 존재하지 않는 상태에서 데이터를 입력하려고 한다면 두 테이블이 해당 키로 연결이 되어있기 때문에 오류가 날 것이다. 그 키값에 해당하는 정보를 모테이블에 입력한다면 문제는 해결될 것이다.
'IT Self-study > MySQL & Database' 카테고리의 다른 글
| 임시 테이블 (0) | 2025.01.17 |
|---|---|
| 테이블 압축 (0) | 2025.01.17 |
| 동적 SQL (0) | 2025.01.15 |
| MySQL 오류 처리 (0) | 2025.01.15 |
| SQL 프로그래밍 (0) | 2025.01.11 |