MySQL세팅 + 기본문법

mechaniccoder·2020년 7월 26일
0
post-thumbnail

MySQL


MySQL은 SQL 언어를 사용하는 관계형 데이터베이스(RDB)의 대표 주자이며, mongoDB는 NoSQL의 대표 데이터베이스입니다. 여기서는 MySQL 세팅 방법과 기본적인 문법에 대해서 알아보죠.

데이터베이스?


데이터베이스는 관련성을 가지고 중복이 없는 데이터의 집합을 의미합니다. 데이터베이스를 관리해주는 시스템을 DBMS라고 부릅니다. 데이터를 저장할 때 HDD, SSD와 같은 저장 디스크에 데이터를 저장하기 때문에 서버랑은 상관없이 보존됩니다.

관계형 데이터베이스를 관리하는 RDBMS에 대표적으로 Oracle, MySQL, PostgresQL등이 있습니다.

설치방법


MySQL 공식 사이트로 가서 설치하면 됩니다. 사용하는 OS에 마다 설치하는 방법이 다릅니다.

윈도우

윈도우를 사용하고 있다면 사이트로 가서 설치하면 됩니다. 이때 DB 서버와 워크벤치만을 설치하려면 custom설정에 들어가서 설치하고 싶은 것만 골라주면 됩니다.

mac

mac을 사용하고 있다면 db는 homebrew로 설치하는게 좋고 워크벤치는 공식 사이트에서 설치한 뒤 워크벤치 아이콘을 Application 폴더로 드래그하면 설치가 완료됩니다.

리눅스(우분투)

우분투는 GUI를 사용하지 않는 경우가 많기 때문에 워크벤치를 설치하지 않습니다. 명령어로 설치하죠.

MySQL 문법


MySQL 프롬프트 접속

문법을 배우기 앞서 먼저 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;

<자료형>

  • INT는 정수를 의미하고 만약 소수를 저장하고 싶다면 FLOAT, DOUBLE을 사용합니다.
  • TINYINT는 -127부터 128까지의 정수를 저장합니다. 1 또는 0만 저장하는 불린 값을 저장할 때 주로 사용하죠.
  • VARCHAR(자릿수)는 가변 길이 자료형이며, CHAR는 고정 길이입니다. 만약 VARCHAR(20)이라면 0 ~ 20 길이의 문자열을 넣어야 하며 CHAR(10)이라면 10 길이의 문자열만 넣어야합니다. 만약 10자리 보다 짧은 문자열을 넣는다면 나머지는 스페이스로 채워집니다.
  • TEXT는 긴 글을 저장할 때 사용합니다.
  • DATETIME은 날짜와 시간에 대한 정보를 담습니다. 시간만 담을꺼면 TIME을 사용하죠.

<옵션>

  • NULL, NOT NULL은 빈 칸을 허용할지에 대한 옵션입니다.
  • id필드에는 AUTO_INCREMENT가 붙어있는데 인스턴스가 추가될 때 자동으로 숫자를 올려서 저장하겠다는 말입니다.
  • UNSIGNED는 숫자 자료형에 적용되는데 음수 범위를 무시하겠다는 말입니다. FLOAT와 DOUBLE에는 적용할 수 없습니다.
  • ZEROFILL은 숫자 자릿수가 고정되어 있을 때 사용합니다. INT(4) 인데 1을 넣게되면 0001로 저장합니다.
  • DEFAULT now()옵션은 db에 값을 주지 않았을 때 자동적으로 현재 시각을 저장합니다.
  • PRIMARY KEY(id)는 로우를 대표하는 고유한 값을 id 컬럼으로 설정합니다.
  • UNIQUE INDEX 해당 값이 고유해야 하는지를 설정합니다. 인덱스 이름은 name_UNIQUE로 ASC는 ascending 즉, 오름차순으로 저장하겠다는 말이죠. 반대는? descending 즉, DESC입니다.

PRIMARY KEY와 UNIQUE INDEX는 데이터베이스가 별도로 관리하기 때문에 조회할 때 속도가 빨라집니다.

  • COMMENT는 테이블 보충 설명을 합니다.
  • DEFAULT CHARSET을 utf8로 설정하지 않으면 한글이 깨져버립니다.
  • ENGINE은 InnoDB 엔진으로 설정했습니다.

그럼 아주 중요한 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의 기본적인 부분만 살펴보는 것이기 때문에 깊게 알고 싶으면 더 알아봐야할 것입니다.

CRUD(Create, Read, Update, Delete)


Create

mysql>INSERT INTO mydb.users (name, age, married, comment) VALUES ('mecha', 27, 0, 'hello');

INSERT INTO [테이블] ([컬럼1], [컬럼2], ...) VALUES ([값1], [값2], ...);

READ

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

UPDATE mydb.users SET comment = '이 값을 바꿉니다.' WHERE id = 2;

DELETE

DELETE FROM mydb.users WHERE id = 2;
profile
세계 최고 수준을 향해 달려가는 개발자입니다.

0개의 댓글