💅 SQL 입문
지난 시간에는 SUBQUERY를 통해 "하나의 SQL문에 또 다른 SQL문"을 작성하여 보다 편리하게 데이터를 조회하는 방법에 대해서 알아보았다. 이번 시간에는 데이터베이스를 새롭게 만들어보며 데이터를 추가, 삭제, 수정하는 등 데이터베이스를 작성하는 시간을 가져본다.
🎀 DataBase
지금까지는 기존에 존재하던 BaseBall 데이터에 쿼리를 실행하였다면, 이번에는 우리가 직접 데이터베이스를 작성하는 시간을 가져보자. 우리는 MMORPG 게임을 개발할 예정이니 게임과 관련덴 데이터베이스를 새롭게 만들어보자. 이러한 데이터베이스를 '스키마'라고 부르기도하니 참고하도록 하자.
🎀 CREATE
데이터베이스를 만드는 행위는 아주 간단하다. 다음과 같은 형식을 띈다.
CREATE DATABASE GameDB;
해당 쿼리를 실행하고, 새로고침을 하면 GameDB라는 데이터베이스가 생성된 것을 볼 수 있다. 지금부터는 해당 데이터베이스를 사용할 것이니, USE GameDB를 입력하고, 실행하여 해당 데이터베이스를 이용한다고 명시해주도록하자.
그 다음으로는 테이블을 제작해보자. 게임을 실행한다면 게임 시작 전 회원가입은 필수이므로, 계정에 대한 테이블을 생성하자.
--CREATE TABLE 테이블명(열의 이름 자료형 [DEFAULT 기본값] [NULL|NOT NULL]...)
CREATE TABLE accounts(
accountId INTEGER NOT NULL,
accountName VARCHAR(10) NOT NULL,
coins INTEGER DEFAULT 0,
createdTime DATETIME
);
이를 C#으로 빗대어 표현한다면
int accountid;
string accountName;
와 같이 자료형을 선언하는 것과 다를 바가 없다. 그저 INTEGER와 같이 자료형 뒤에 NULL인지, Default 값은 무엇인지, 어떤게 Primary Key인지(후에 설명) 부가적인 제약 조건이 붙을 뿐이다.
테이블을 생성 한 후에 SELECT * FROM accounts;로 조회해보면, 우리가 작성한 의도대로 정상적으로 열이 생성됨을 알 수 있을 것이다.
🎀 DROP
DROP은 테이블을 삭제시 사용하는 명령어다.
DROP TABLE accounts;
다만 테이블을 삭제시키는 만큼, 쿼리를 수행하면 통짜로 날아가므로 이에 유의하자.
🎀 ALTER
테이블 추가, 삭제 뿐만 아니라 테이블에 대해 변경을 할 수도 있다. 즉, 열을 추가(ADD)하거나 삭제(DROP)하거나 변경(ALTER)할 수 있다.
그렇다면 누군가는 '애초에 추가할 때, 모든 정보를 넣으면 되지 않는가?' 의문을 가질 수 있는텐데, 당장 우리가 즐기는 게임에서 신규 업데이트로 지역이나 아이템이 추가되는 사례가 빈번하므로 게임 초창기 버전부터 모든 정보를 포함하기란 쉽지 않기에, ALTER가 쓰이는 것이다.
추가를 예로 들기 위해 accounts 테이블 내 마지막 접속 시간을 추가해보자.
--테이블 accounts를 변경하되, DATETIME 자료형 열을 추가하자.
ALTER TABLE accounts
ADD lastEnterTime DATETIME;
방금 생성한 마지막 접속 시간을 다시 삭제(DROP)하고 싶다면 다음 쿼리를 실행하자.
--테이블 accounts를 변경하되, lastEnterTime 열(COLUMN)을 삭제(DROP)하자.
ALTER TABLE accounts
DROP COLUMN lastEnterTime;
이번엔 account 테이블 내 accountName의 자료형 크기를 수정하고, NULL이 아니여야 하는 조건을 추가해보자.
ALTER TABLE accounts
ALTER COLUMN accountName VARCHAR(20) NOT NULL;
이렇 NOT NULL 등의 추가 사항 등을 제약(CONSTRAINT)이라고 부르며, 이는 ALTER를 통해 추가 및 삭제 할 수 있다.
🎀 CONSTRAINT
대표적인 제약 조건은 다음과 같다.
- NOT NULL/NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
이 중에서 PRIMARY KEY는 매우 중요하므로 반드시 알아야한다. 예를 통해 PRIMARY KEY에 대해 알아보도록 하자. 다시한번 Baseball 데이터베이스에서 Player 테이블의 디자인을 살펴보자.
위와 같이 lahmanID 열에 자그마한 열쇠 모양이 달려있다. 이는 C#으로 비유하면 Dictionary 구조라고 볼 수 있다. Dictionary<int,string>의 예시로, 앞 자료형 int가 Key이며, 덕분에 string을 고유하게 구분할 수 있다.
데이터베이스 역시 Primary Key가 이와 같은 역할을 한다. 무지막지하게 많은 데이터가 있을 때, 빠르게 찾기 위한 용도라는 점이다.
해당 특성에 덧붙여 Primary Key는 유일성을 보장해야 한다. (예) 주민등록번호) 이를 달리 말하면, GameDB에서 coin 등의 열은 값이 항상 변하기도 하고, 중복될 수 있기 때문에 Primary Key로 선정하기에 매우 부적절할 것이다. 또한 혹은 두 개 이상의 열을 Primary Key로도 지정할 수 있다.
이제 Primary Key 에 대해 알아보았으니 SQL 쿼리문을 이용해 지정해보자.
ALTER TABLE accounts
ADD PRIMARY KEY(accountId);
그러나 이러한 방법으로는 한계점이 있는데, 만에 하나 다시 Primary Key를 취소하고 싶다하면 생성한 Primary Key의 이름이 정해져 있지 않아 다소 난감하다. 따라서 아래와 같은 쿼리로 이름을 지정하고, DROP로 이름을 정해 이를 삭제하는 것을 권장한다.
ALTER TABLE accounts
ADD CONSTRAINT PK_Account PRIMARY KEY(accountID);
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 5-2-14. SQL 입문 : INDEX (1) | 2024.02.13 |
---|---|
Part 5-2-13. SQL 입문 : 정규화 (1) | 2024.02.13 |
Part 5-2-11. SQL 입문 : SUBQUERY (0) | 2024.02.13 |
Part 5-2-10. SQL 입문 : INSERT, DELETE, UPDATE (1) | 2024.02.12 |
Part 5-2-9. SQL 입문 : GROUP BY (0) | 2024.02.12 |