MySQL은 SQL 언어를 사용하는 관계형 데이터베이스(RDB)의 대표 주자이며, mongoDB는 NoSQL의 대표 데이터베이스입니다. 여기서는 MySQL 세팅 방법과 기본적인 문법에 대해서 알아보죠.
데이터베이스는 관련성을 가지고 중복이 없는 데이터의 집합을 의미합니다. 데이터베이스를 관리해주는 시스템을 DBMS라고 부릅니다. 데이터를 저장할 때 HDD, SSD와 같은 저장 디스크에 데이터를 저장하기 때문에 서버랑은 상관없이 보존됩니다.
관계형 데이터베이스를 관리하는 RDBMS에 대표적으로 Oracle, MySQL, PostgresQL등이 있습니다.
MySQL 공식 사이트로 가서 설치하면 됩니다. 사용하는 OS에 마다 설치하는 방법이 다릅니다.
윈도우를 사용하고 있다면 사이트로 가서 설치하면 됩니다. 이때 DB 서버와 워크벤치만을 설치하려면 custom설정에 들어가서 설치하고 싶은 것만 골라주면 됩니다.
mac을 사용하고 있다면 db는 homebrew로 설치하는게 좋고 워크벤치는 공식 사이트에서 설치한 뒤 워크벤치 아이콘을 Application 폴더로 드래그하면 설치가 완료됩니다.
우분투는 GUI를 사용하지 않는 경우가 많기 때문에 워크벤치를 설치하지 않습니다. 명령어로 설치하죠.
문법을 배우기 앞서 먼저 MySQL 프롬프트에 접속을 해야겠죠. 윈도우 환경에서는 MySQL이 설치된 디렉토리에서 다음과 같은 명령어를 입력하면 됩니다.
$ mysql -h localhost -u root -p
-h는 접속할 주소를 -u는 접속할 사용자명 -p는 비밀번호를 사용하겠다는 뜻입니다.
mysql> CREATE SCHEMA mydb; // 데이터베이스 생성
Query OK, 1 row affected
mysql> use mydb; // 데이터베이스 사용
Database changed
mysql> SHOW databases
눈 여겨봐야할 점은 세미콜론을 뒤에 붙여줘야 문장이 끝납니다.
그럼 구체적으로 테이블을 작성해보죠. 유저 정보에 관한 테이블을 작성해보겠습니다.
mysql> CREATE TABLE mydb.users (
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> age INT UNSIGNED NOT NULL,
-> married TINYINT NOT NULL,
-> comment TEXT NULL,
-> created_at DATETIME NOT NULL DEFAULT now(),
-> PRIMAY KEY(id),
-> UNIQUE INDEX name_UNIQUE (name ASC))
-> COMMENT='사용자 정보'
-> DEFAULT CHARSET=utf8
-> ENGINE=InnoDB;
<자료형>
<옵션>
PRIMARY KEY와 UNIQUE INDEX는 데이터베이스가 별도로 관리하기 때문에 조회할 때 속도가 빨라집니다.
그럼 아주 중요한 FOREIGN KEY 연결하는 방법을 간단하게 알아봅시다.
mysql> CREATE TABLE mydb.comments (
-> id INT NOT NULL AUTO_INCREMENT,
-> commenter INT NOT NULL,
-> INDEX commenter_idx (commenter ASC),
-> CONSTRAINT commenter FOREIGN KEY (commenter) REFERENCES mydb.users (id)
-> ON DELETE CASCADE ON UPDATE CASCADE)
...
CONSTRAINT [제약조건] FOREIGN KEY [컬럼명] REFERENCES [연결할 컬럼명] 과 같이 외부 테이블을 연결할 수 있습니다. ON DELETE와 ON UPDATE는 user정보가 삭제되거나 업데이트될 때 comments 테이블을 어떤 식으로 처리할지 설정합니다.
당연히 여기서는 MySQL의 기본적인 부분만 살펴보는 것이기 때문에 깊게 알고 싶으면 더 알아봐야할 것입니다.
mysql>INSERT INTO mydb.users (name, age, married, comment) VALUES ('mecha', 27, 0, 'hello');
INSERT INTO [테이블] ([컬럼1], [컬럼2], ...) VALUES ([값1], [값2], ...);
SELECT * FROM mydb.users;
SELECT * FROM mydb.comments;
SELECT name, married FROM mydb.users;
SELECT name, age FROM mydb.users WHERE married = 1 AND age > 20;
SELECT id, name FROM mydb.users ORDER BY age DESC;
SELECT id, name FROM mydb.users ORDER BY age DESC LIMIT 1 OFFSET 1;
정말 다양한 속성들이 있기 때문에 적재적소에 잘 활용하기만 하면 원하는 데이터를 읽을 수 있습니다.
UPDATE mydb.users SET comment = '이 값을 바꿉니다.' WHERE id = 2;
DELETE FROM mydb.users WHERE id = 2;