세리프 따라잡기
MySQL에 대해, 구조, 명령어, 테이블 생성, CRUD 본문
1. MySQL에 대하여
- SQL은 Structured(구조화) Query(데이터베이스에게 요청하는 것(데이터)) Language(사람과 컴퓨터가 이해할 수 있는 언어)의 약자이다.
- 누구나 쉽게 데이터를 정리정돈할 수 있는 SW = Database
- 모든 DB는 관계형 데이터베이스. 이를 이용하면 데이터를 표(table)의 형태로 정리정돈할 수 있고 정렬 검색과 같은 작업을 빠르고 편리하고 안전하게 할 수 있다. 데이터베이스에서 column(열)을 이야기하면 데이터의 타입(구조)을 가리키고, row(행)를 이야기하면 데이터 각 하나(데이터 자체)를 가리킨다.
- 관계형 데이터베이스에 입각해 이용하는 기술들: MySQL, Oracle, SQL server, PostgreSQL, DB2, Access.
- 1994년 스웨덴에서 개발된 MySQL은 무료이고 오픈소스이면서 관계형 데이터베이스의 주요한 기능을 대부분 갖고 있는 준수한 데이터베이스 시스템이다. 특히 WEB이 성장하면서 MySQL을 더 많이 사용하게 되며 같이 성장했다.
- 스프레드 시트(sheet)와 관계형 데이터베이스의 공통적이며 주요한 특징은 데이터를 표의 형태로 표현해준다는 것이다. 큰 차이점은 시트는 클릭을 이용하여, DB는 코딩을 통해서 컴퓨터 언어를 통해서 제어할 수 있다는 것이다. 이는 기다림 없이 바로 실행된다는 장점이 있다.
- 웹 사이트의 정보를 데이터베이스에 담을 때, ①데이터베이스에 있는 정보를 누구나 웹 사이트에 접속해서 볼 수 있고, ②누구나 글을 쓰면 직접 데이터베이스를 제어하지 않아도 사이트에 들어와서 글을 쓰면 데이터베이스에 저장된다.
2. 구조
- 관계형 데이터베이스들은 데이터를 기록하는 최종적인 곳은 표이다. 이때 표가 늘어난다면 정리정돈의 필요성이 대두된다. 그리고 연관된 표들을 그룹핑해서 연관되어 있지 않은 표들과 분리하는 폴더같은 것이 있는데, 이를 데이터베이스(=스키마)라고 한다.
- 표들의 그룹인 스키마들이 많아지면 이를 또 저장해야 하는데, 이들을 데이터베이스 서버라 한다.
3. Command(명령어 모음)
-u(이름) | user의 약자. '이름'이라는 사용자로 접속한다. ex. -uroot |
-p | passwd의 약자. 비밀번호 입력창을 띄운다. ex. -uroot -p |
CREATE DATABASE 이름; | '이름'에 대한 데이터베이스를 생성한다. |
DROP DATABASE 이름; | '이름'에 대한 데이터베이스를 삭제한다. |
SHOW DATABASES; | 데이터베이스에 있는 목록들(복수형)을 보여준다. |
SHOW TABLES; | 해당 스키마(데이터베이스) 안에 있는 목록들을 보여준다. |
USE 이름; | 이름에 대한 데이터베이스를 사용하겠다는 의미이다. 이후에 대한 명령들은 이 스키마 내에서 실행된다. |
SHOW WARNINGS\G | 위험 요소가 떴을 때, 그에 대한 원인을 보여준다. |
DESC 테이블명; | 테이블명에 대한 구조를 보여준다. |
RENAME TABLE 변경전이름 to 변경후이름 | 변경전이름에 대해 변경후이름으로 바꿔준다. |
4. 테이블의 생성
CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(30) NULL,
profile VARCHAR(100) NULL,
PRIMARY KEY(id)
);
- 코드 설명(순서대로):
not null은 값이 없는 것(공백)을 허용하지 않겠다는 것
auto_increment는 해당 값이 자동으로 1씩 증가한다는 것. [ex. id의 열이 1 2 3 4 5로 증가]
null은 값이 없는 것을 허용하겠다는 것,
primary key는 그 topic의 메인을 가리키는 것 [사용 이유: ①성능적 측면, ②중복을 방지한다] = 즉 'id 각각의 값들이 고유해야 한다.'라고 알려주는 것.
- 에러 발생에 대해
Query OK, 0 rows affected, 1 warning (~~ sec)
다음과 같은 위험이 뜬다면 SHOW WARNINGS\G를 입력하여 원인이 뭔지를 알 수 있다.
*************************** 1. row ***************************
Level: Warning
Code: 1681
Message: Integer display width is deprecated and will be removed in a future release.
그러면 위와 같이 출력되는데, 찾아보니 MySQL의 8.0.17 버전 이후부터는 int datatype의 width를 설정하는 것을 지원하지 않기 때문에 발생하는 것이라고 한다. 때문에 다음과 같이 수정해주자.
ALTER TABLE 테이블명 MODIFY COLUMN 열이름 데이터 타입 조건;
→ ALTER TABLE topic MODIFY COLUMN id int NOT NULL AUTO_INCREMENT;
이후 위험없이 잘 실행되는 것을 볼 수 있다.
Data-type에 대한 참고 사이트:
- 자신이 만들고자(사용하고자) 하는 데이터 타입에 맞는 형태를 쓰는 것이 중요하다!
5. CRUD(Create Read Update Delete)
- Create [생성, 추가]
INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is ...',NOW(),'gothic','developer');
코드 해석:
topic () 안의 열 이름은 values가 뭔지를 알려준다. 때문에 순서대로 작성해야 한다.
NOW()는 현재시간을 알려주는 함수이다.
제대로 입력하여 엔터를 누른다면 1행이 영향을 받았다는 문구가 뜬다.
- Read [읽기]
SELECT * FROM topic;
: topic(테이블명) 테이블로부터 모든(*) 데이터를 가지고 오는 명령어.
만약 원하는 데이터 값이 id, title, author라면 *가 적힌 칸에 다음과 같이 입력하면 된다. → SELECT id, title, author FROM topic; = 즉 원하는 데이터의 열 이름을 적어주면 된다. 달리 말하면 적지 않은 것들을 숨겨주는 효과.
SELECT * FROM topic WHERE author='gothic';
: topic 테이블의 모든 데이터 중에 author에 gothic이라고 적힌 값만 가지고 오는 명령어.
SELECT * FROM topic WHERE author='gothic' ORDER BY id DESC;
: topic 테이블의 모든 데이터 중에 author에 gothic이라고 적힌 값을 내림차순으로 출력하라고 오더 하는 명령어.
SELECT * FROM topic WHERE author='gothic' ORDER BY id DESC LIMIT 2;
: topic 테이블의 모든 데이터 중에 author에 gothic이라 적힌 값을 내림차순으로 출력하되, 출력을 2개까지로 제한하는 명령어.
※ 데이터베이스의 핵심은 이 SELECT문을 얼마나 잘 사용하는지에 달려있다!!
- Update [수정]
UPDATE topic SET title='Oracle' WHERE id=2;
: topic 테이블의 title을 Oracle로 변경해주고, 이에 대한 위치는 id값의 2번째 행이라고 알려주며 수정하는 명령어.
- Delete [삭제]
DELETE FROM topic WHERE id=5;
: topic 테이블의 id값 5번째 행을 삭제하는 명령어.
※ update와 delete문을 쓸 때는 반드시 where(위치)를 제대로 지정하고 써야한다. [아니면 ....................😨]
'MySQL' 카테고리의 다른 글
MySQL '--no beep' 오류 해결 방법 (0) | 2021.04.07 |
---|---|
MySQL 관계형 데이터베이스의 필요성, JOIN, 인터넷, 클라이언트, workbench 사용법, 끝으로.. (0) | 2021.03.15 |
MySQL Command Line Client에서 드래그하기 (0) | 2021.03.12 |