MySQL Basic

2023. 5. 15. 17:57RDBMS/mysql

이 글은 생활코딩 님의 MySQL 강의를 듣고 정리한 글입니다.

MySQL 의 구조

 

관계형 데이터베이스는 엑셀과 비슷한 표(table)로 저장된다.

서로 연관된 표를 그룹핑 한 것을 데이터베이스 라고 한다.

스키마 : 서로 연관된 표를 그룹핑한 일종의 폴더

 


MySQL 서버 접속

 

실제로는 root 로 작업을 하면 위험하니 다른 계정을 만들어 사용하는 것이 권장된다.

 

mysql -uroot -p

MySQL 스키마의 사용

 

데이터 베이스를 만들때

CREATE DATABASE opentutorials;

데이터 베이스를 지울때

DROP DATABASE opentutorials;

데이터 베이스 생성 확인

SHOW DATABASES;

데이터 베이스 사용

USE opentutorials;

SQL 과 테이블 구조

 

테이블은 x, y 축으로 쪼갤수 있는데 수평이로 되어있는 것을 row (행) 이라고 한다.

수직으로 된 칸 하나 하나를 column(열) 이라고 한다.

 


MySQL 테이블 생성

 

CREATE TABLE topic(
	id INT(11) NOT NULL AUTO_INCREMENT,
	title VARCHAR(100) NOT NULL,
	description TEXT NULL,
	created DATETIME NOT NULL,
	author VARCHAR(15) NULL,
	profile VARCHAR(200) NULL,
	PRIMARY KEY(id)
);

ERROR 1820(HYOOO): You must reset your password using ALTER USER statement before executing this statement

-> MySQL 이 기본으로 준 비밀번호를 사용하면 나타나는 에러

 

해결방법

mysql> SET PASSWORD = PASSWORD('your_new_password');

MySQL CRUD

 

테이블 구조 보기

DESC topic;

INSERT (C)

INSERT TOPIC (title, description, created, author, profile) VALUES('MySQL', 'MySQL is ...', NOW(), 'egoing', 'developer');

SELECT (R)

- topic 행 모두 출력

SELECT * FROM topic;

- id, title, created, author 만 출력

select id, title, created, author from topic;

- select 뒤에는 column 을 작성해야한다.

- from 은 생략 가능하다.

 

- author 의 값이 'egoing' 인 값만 가져오기 ( where 문은 from  다음에 위치한다 )

select id, title, created, author from topic where author='egoing';

- 정렬하기

select id, title, created, author from topic where author='egoing' order by id desc;

- 2개만 보고싶다면

select id, title, created, author from topic where author='egoing' order by id desc limit 2;

 

UPDATE (U)

update topic set description='Oracle is ...', title='Oracle' where id=2;

- where 절을 빼먹는다면 모두 다 바뀔수 있으니 조심해야한다.

 

DELETE (D)

delete from topic where id=5;

- 마찬가지로 where 절을 빼먹으면 인생이 바뀔 수도 있으니 조심

 


관계형 데이터베이스의 필요성

 

- 만약 데이터가 중복된다면 개선할 필요가 있다는 것

- 테이블을 나누어 준다면 개선할 수 있다. 

- 테이블을 나누면 데이터를 볼때 행에 해당되는 표를 비교하면서 봐야하는 불편함이 생기긴 하나 mysql 은 이 불편함을 없앨수 있다.

 


테이블 분리하기

 

- rename 은 테이블 이름을 바꾼다.

rename table topic to topic_backup;

show tables;

- author 테이블 만들기

CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `profile` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

- author 테이블에 값 넣기

INSERT INTO `author` VALUES (1,'egoing','developer');
INSERT INTO `author` VALUES (2,'duru','database administrator');
INSERT INTO `author` VALUES (3,'taeho','data scientist, developer');

- topic 테이블 생성

CREATE TABLE `topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) NOT NULL,
  `description` text,
  `created` datetime NOT NULL,
  `author_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

- topic 테이블에 값 넣기

INSERT INTO `topic` VALUES (1,'MySQL','MySQL is...','2018-01-01 12:10:11',1);
INSERT INTO `topic` VALUES (2,'Oracle','Oracle is ...','2018-01-03 13:01:10',1);
INSERT INTO `topic` VALUES (3,'SQL Server','SQL Server is ...','2018-01-20 11:01:10',2);
INSERT INTO `topic` VALUES (4,'PostgreSQL','PostgreSQL is ...','2018-01-23 01:03:03',3);
INSERT INTO `topic` VALUES (5,'MongoDB','MongoDB is ...','2018-01-30 12:31:03',1);

JOIN

 

- 분리된 테이블을 읽을 때 하나의 테이블을 보는 것 같이 할 수 있다.

- 두 개의 테이블의 결합고리는 topic 테이블의 author_id 와 author 테이블의 id

select * from topic left join author on topic.author_id = author.id;

- 위의 코드에서 id 를 숨기고 싶다면?

select topic.id, topic.title, topic.description, topic.created, author.name, author.profile from topic left join author on topic.author_id = author.id;

- id 를 구분하고 싶다면 바꿀 수도 있다.

- as 를 사용해 그 이름으로 보이게 할 수 있다.

select topic.id as topic_id, topic.title, topic.description, topic.created, author.name, author.profile from topic left join author on topic.author_id = author.id;

- 테이블을 분리함으로써 데이터 하나를 바꾸면 관련있는 모든 테이블의 정보를 바꿀 수 있다.


MySQL 검색 키워드

 

index

- 데이터를 찾는데 걸리는 시간을 줄여줌

- 미리 정리해두는 느낌

 

modeling

- 정규화 비정규화

- 데이터들이 많아짐에 따라 어떻게 테이블을 만들어야 하나?

 

backup

- 언제 고장날지 모름

- 데이터를 복제해서 보관한다.

- mysql 덤프

# mysqldump -u 계정 -p패스워드 DB명 > /디렉토리/파일명.sql

cloud

- AWS RDS

- Google Cloud SQL for MySQL

- AZURE Database for MySQL

 

programming

- Python mysql api

- PHP mysql api

- Java mysql api

'RDBMS > mysql' 카테고리의 다른 글

mysql homebrew 설치  (0) 2023.04.10
데이터베이스 생성, 확인, 삭제  (0) 2023.04.10