티스토리 뷰

TIL

TIL 220731 생활코딩 MySQL

2021bong 2022. 8. 1. 00:44

MySQL을 설치한다.

 

설치 후 서버 접속

mysql -uroot -p

처음 실행할 때는 root라는 유저로 로그인을 한다. -p 옆에 비밀번호를 바로 적어 줄 수도 있지만 그럼 비밀번호가 노출되므로 보안을 위해 엔터 후에 다음 줄에 비밀번호를 입력한다.


데이터베이스 생성

데이터 베이스를 생성할 수 있다. 데이터베이스명을 감싸고 있는 것은 작은따옴표가 아니라 백틱이다.

CREATE DATABASE `데이터베이스명` CHARACTER SET utf8 COLLATE utf8_general_ci;

 

데이터베이스 삭제

데이터 베이스를 삭제할 수 있다.

DROP DATABASE `데이터베이스명`;

 

데이터베이스 열람

존재하는 데이터베이스들을 확인할 수 있다.

SHOW DATABASES;

 

 

데이터베이스 선택

데이터베이스명으로 선택된 데이터베이스를 사용할 수 있다. 이제부터 입력하는 명령어는 해당 데이터베이스를 대상으로 사용된다.

USE `데이터베이스명`;

테이블(Table)이란?

데이터가 실질적으로 저장되는 저장소이다.

 

테이블 생성

CREATE 명령어로 생성하며 컬럼마다 데이터 타입을 설정할 수 있다. NOT NULL을 설정하면 빈값은 허용하지 않겠다는 의미이다.

PRIMARY KEY는 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. 테이블마다 딱 하나의 primary key를 가질 수 있다. 테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 한다. WHERE문을 이용해서 데이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다.

CREATE TABLE table_name (
    컬럼명1 data_type,
    컬럼명2 data_type
)

// 예제
CREATE TABLE `student` (
    `id`  tinyint NOT NULL ,
    `name`  char(4) NOT NULL ,
    `sex`  enum('남자','여자') NOT NULL ,
    `address`  varchar(50) NOT NULL ,
    `birthday`  datetime NOT NULL ,
    PRIMARY KEY (`id`)
);

 

테이블 열람

존재하는 테이블들을 볼 수 있다.

SHOW tables;

 

테이블 제거

테이블명을 가진 테이블을 삭제할 수 있다.

DROP TABLE `테이블명`;

 

스키마(schema)란?

테이블에 적재될 데이터의 구조와 형식을 정의하는 것이다.

 

테이블 스키마 열람

테이블명을 가진 테이블의 스키마를 볼 수 있다.

DESC `테이블명`;

데이터 입력

INSERT INTO를 사용해 데이터를 입력할 수 있다. 데이터를 입력할 테이블명에 데이터만 입력할 수도 있고, 컬럼 이름들을 적으면서 데이터를 적을 수도 있다. 컬럼의 이름과 들어갈 데이터의 순서가 같아야한다.

INSERT INTO table_name VALUES (value1, value2, value3,...)
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3)

// 예제
INSERT INTO `student` VALUES ('2', '김철수', '남자', '서울', '2000-10-10');
INSERT INTO `student` (`id`, `name`, `sex`, `address`, `birthday`) VALUES ('1', '김영희', '여자', '서울', '2000-01-01');

 

데이터 수정

UPDATE를 사용해 데이터를 수정할 수 있다. WHERE 없이 사용하면 테이블에 있는 변경한 컬럼의 데이터들이 모두 바뀐다. 일부를 변경하고 싶다면 꼭 잊지말고 WHERE를 사용해야한다. SET 뒤에 여러 개의 컬럼값을 적으면 여러 개를 동시에 수정할 수 있다.

UPDATE 테이블명 SET 컬럼1=컬럼1의 값, 컬럼2=컬럼2의 값 WHERE 대상이 될 컬럼명=컬럼의 값

//예제
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL,
  `name` char(4) NOT NULL,
  `sex` enum('남자','여자') NOT NULL,
  `address` varchar(50) NOT NULL,
  `birthday` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', '김영희', '여자', '서울', '2000-01-01');
INSERT INTO `student` VALUES ('2', '김철수', '남자', '서울', '2000-10-10');

UPDATE `student` SET address='대한민국';
UPDATE `student` SET name='박영희' WHERE id=1;
UPDATE `student` SET name='이철수', birthday='2001-10-1' WHERE id=2;

 

데이터 삭제

행 단위로 데이터를 삭제할 때는 DELETE를 쓴다.

DELETE FROM 테이블명 [WHERE 삭제하려는 칼럼 명=값]

//예제
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL,
  `name` char(4) NOT NULL,
  `sex` enum('남자','여자') NOT NULL,
  `address` varchar(50) NOT NULL,
  `birthday` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', '김영희', '여자', '서울', '2000-01-01');
INSERT INTO `student` VALUES ('2', '김철수', '남자', '서울', '2000-10-10');
INSERT INTO `student` VALUES ('3', '박지예', '여자', '서울', '2000-04-05');

DELETE FROM student WHERE id = 2;

 

테이블의 전체 데이터를 삭제할 때는 TRUNCATE를 쓴다.

TRUNCATE 테이블명;

 

데이터 조회

다양한 명령어를 사용해 원하는 형태의 데이터를 조회할 수 있다.

SELECT 칼럼명1, 칼럼명2 
    [FROM 테이블명 ] 
    [GROUP BY 칼럼명] 
    [ORDER BY 칼럼명 [ASC | DESC]] 
    [LIMIT offset, 조회 할 행의 수]
    
//예제
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL,
  `name` char(4) NOT NULL,
  `sex` enum('남자','여자') NOT NULL,
  `address` varchar(50) NOT NULL,
  `birthday` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', '김영희', '여자', '서울', '2000-01-01');
INSERT INTO `student` VALUES ('2', '김철수', '남자', '서울', '2000-10-10');
INSERT INTO `student` VALUES ('3', '박지예', '여자', '서울', '2000-04-05');

SELECT * FROM student;
SELECT name, birthday FROM student;
SELECT * FROM student WHERE id=3;
SELECT * FROM student ORDER BY birthday DESC;
SELECT sex FROM student GROUP BY sex;
SELECT * FROM student WHERE sex='남자' AND address='서울';
SELECT * FROM student WHERE sex='여자' OR address='서울';
SELECT * FROM student LIMIT 1;
SELECT * FROM student LIMIT 2,1;
SELECT * FROM student WHERE sex='남자' LIMIT 2;

 

여러 개의 테이블 이용하기

테이블간의 관계성에 따라서 복수의 테이블을 결합, 하나의 테이블인 것처럼 결과를 출력한다. JOIN 명령어를 사용한다. 

  • OUTTER JOIN : 매칭되는 행이 없어도 결과를 가져오고 매칭되는 행이 없는 경우 NULL로 표시한다.
    LEFT JOIN과 RIGHT JOIN이 있다.
  • INNER JOIN : 조인하는 두개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져온다.
SELECT s.name, s.location_id, l.name AS address, l.distance  FROM student AS s LEFT JOIN location AS l ON s.location_id = l.id;

s의 name, s의 location_id, address라고 별명 붙인 l의 name, l의 distance를 보여주는데
student 테이블을 s라고 하고, location 테이블은 l이라고 한다. 레프트 조인한다. s테이블의 location_id와 l테이블의 id는 같다.

JOIN을 사용하면 서로 다른 테이블을 한 테이블인 것처럼 가공해 데이터를 볼 수 있다.

 


이고잉 선생님이 자기가 제일 쉬운 언어라고 말하는 2가지 언어가 있는데 하나는 HTML이고 하나는 SQL이라고 하셨다. 맞아요, 다른 언어보다 직관적이고 상대적으로 쉬운 것 같아요, 선생님!

수업에서 명령어를 계속 대문자로 쓰시길래 궁금해서 찾아봤더니 옛날 에디터에는 가독성을 위한 색상이나 강조가 없어서 가독성을 위해 대문자로 썼는데 그게 이어져 내려온거라고 한다. 하지만 공식문서에서도 대문자 사용을 권장하고, 오라클에서는 성능 문제가 생길수도 있다고 하니 대문자로 작성하는 습관을 들여야겠다.

GUI 데이터베이스 클라이언트가 데이터 수정에는 더 좋을 것 같지만 기본으로 제공해주는 mysql monitor가 제일 마음에 든다. 터미널에서 명령어를 입력하는 것이 너무 좋고 멋있고 즐겁다..... 까만 화면 짱!

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함