이 글은 "TCPschool/코딩과 데이터/MySQL"을 읽고 주관적으로 작성된 글입니다.
https://tcpschool.com/mysql/intro
1. 기본 문법
1) MySQL 구문
- SQL 구문을 통해 데이터베이스에 작업 명령
- ex) SELECT * FROM Reservation;
- 서버와 연결을 끊는 QUIT를 제외하고 세미콜론을 붙임
- 세미콜론이 SQL 구문의 구분 기준
- 키워드 / 구문dms 대소문자 구분이 없고, 테이블 명 / 필드 이름은 구분
- SELECT * FROM Reservation;
- select * from Reservation;
- SeLeCt * FrOm Reservation;
2) MySQL 주석
- 주석 문법
- # 한 줄 주석
- -- 한 줄 주석 (반드시 한 칸 공백 필요)
- */ 두 줄
이상의
주석 */
3) MySQL 주요 구문
- 예제 테이블 (Reservation)
ID | Name | Date | RoomNum |
1 | 홍길동 | 2016-01-05 | 2014 |
2 | 임꺽정 | 2016-02-12 | 918 |
3 | 장길산 | 2016-01-16 | 1208 |
4 | 홍길동 | 2016-03-17 |
- 예제 테이블 (Customer)
ID | Name | Age | Address |
1 | 홍길동 | 17 | 서울 |
2 | 임꺽정 | 11 | 인천 |
3 | 장길산 | 13 | 서울 |
4 | 전우치 | 17 | 수원 |
- 살펴볼 주요 구문
- CREATE DATABASE
- ALTER DATABASE
- CREATE TABLE
- ALTER TABLE
- DROP TABLE
- INSERT INTO
- UPDATE
- DELETE
- SELECT
- CREATE INDEX
- DROP INDEX
4) MySQL 코딩 연습
- 기본 스키마
CREATE TABLE Reservation(ID INT, Name VARCHAR(30), ReserveDate DATE, RoomNum INT);
CREATE TABLE Customer(ID INT, Name VARCHAR(30), Age INT, Address VARCHAR(20));
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(1, '홍길동', '2016-01-05', 2014);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(2, '임꺽정', '2016-02-12', 918);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(3, '장길산', '2016-01-16', 1208);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(4, '홍길동', '2016-03-17', 504);
INSERT INTO Customer(ID, Name, Age, Address) VALUES (1, '홍길동', 17, '서울');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (2, '임꺽정', 11, '인천');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (3, '장길산', 13, '서울');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (4, '전우치', 17, '수원');
2. CREATE
1) CREATE
- 데이터베이스 / 테이블 생성
- CREATE DATABASE
- CREATE TABLE
2) 데이터베이스
- 생성
- CREATE DATABASE 데이터베이스 이름
- 생성된 데이터베이스 목록
- SHOW DATABASES
- 데이터베이스 선택
- USE 데이터베이스 이름
- 데이터베이스 이름의 대소문자 구분
- Unix : 구분
- Windows : 구분 X
3) 테이블
- 생성
- CREATE TABLE 테이블 이름
(
필드이름1 필드타입1,
필드이름2 필드타입2
); - 하나의 쿼리를 여러 줄에 입력 가능
- 예제
- CREATE TABLE 테이블 이름
CREATE TABLE Test
(
ID INT,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
- 생성된 테이블 목록
- SHOW TABLES
- 테이블 상세정보
- DESC 테이블 이름
3) 제약 조건 (constraint)
- 데이터의 무결성을 지키기 위해 데이터를 입력 받을 때 실행되는 검사 규칙
- CREATE / ALTER 문에서 설정 가능
- CREATE TABLE문에서 사용가능한 제약조건
- NOT NULL
- NULL을 저장할 수없음 - UNIQUE
- 해당 필드는 서로 다른 값을 가져야함 - PRIMARY KEY
- NOT NULL + UNIQUE - FOREIGN KEY
- 하나의 테이블을 다른 테이블에 의존하게 만듦 - DEFAULT
- 해당 필드의 기본값 설정 - AUTO_INCREMENT
- 해당 필드 값을 1부터 시작해서 새로운 레코드가 추가될 때마다 1씩 증가된 값 저장
- 키워드 다음 대입 연산자(=)를 이용하여 시작값 변경 가능
- NOT NULL
3. ALTER
1) ALTER
- 데이터베이스와 테이블 수정
- ALTER DATABASE
- ALTER TABLE
2) 데이터베이스
- 데이터베이스의 전체적인 특성 수정
- 데이터베이스 디렉토리의 db.opt 파일에 저장
- ALTER DATABASE 데이터베이스 이름 CHARACTER SET=문자집합 이름
- ALTER DATABASE 데이터베이스 이름 COLLATE=콜레이션 이름
* 콜레이션(collation) : 데이터베이스에서 검색이나 정렬과 같은 작업을 할 때 사용하는 비교를 위한 규칙의 집합
- 데이터베이스의 문자집합 / 콜레이션 변경 예제
- ALTER DATABASE Hotel CHARACTER SET=euckr_bin COLLATE=euckr_korean_ci;
- 자주 사용되는 CHARACTER SET
- utf8 : UTF-8 유니코드를 지원하는 문자셋 (1~3바이트)
- euckr : 한글을 지원하는 문자셋 (1~2바이트)
- 자주 사용되는 COLLATE
- utf8_bin
- utf8_general_ci (기본설정)
- euckr_bin
- euckr_korean_ci
* ci는 case-insensitive, 대소문자 구분하지 않게 설정함
3) 테이블
- ADD
- 새로운 필드 추가
- ALTER TABLE 테이블 이름 ADD 필드이름 필드타입
- ALTER TABLE Reservation ADD Phone INT;
- DROP
- 기존 필드 삭제
- ALTER TABLE 테이블 이름 DROP 필드 이름
- ALTER TABLE Reservation DROP RoomNum;
- MODIFY COLUMN
- 필드 타입 변경
- ALTER TABLE 테이블 이름 MODIFY COLUMN 필드 이름 필드 타입
- ALTER TABLE Reservation MODIFY COLUMN ReserveDate VARCHAR(20);
4. DROP
1) DROP
- 데이터베이스와 테이블 삭제
- DROP DATABASE
- DROP TABLE
- 데이터베이스
- DROP DATABASE 데이터베이스 이름
- DROP DATABASE Hotel
- 모든 테이블 / 데이터 삭제됨
- 테이블
- DROP TABLE 테이블 이름
- 모든 데이터 삭제됨
- TRUNCATE TABLE 테이블 이름
- 테이블은 남기고 데이터만 지움
- IF EXISTS
- 존재하지 않은 데이터베이스 / 테이블 삭제시 발생하는 에러 방지
- DROP DATABASE IF EXISTS Hotel;
- DROP TABLE IF EXISTS Reservation;
'CS > MySQL' 카테고리의 다른 글
[프로그래머스][SQL][SELECT] 모든 레코드 조회하기 (0) | 2021.08.06 |
---|---|
[TCPschool][4장] 연산자와 함수 (0) | 2021.08.06 |
[TCPschool][3장] 타입 (0) | 2021.08.04 |
[TCPschool][2장] MySQL 문법(2/2) (0) | 2021.08.01 |
[TCPschool][1장] MySQL 시작 (0) | 2021.07.24 |