CS/MySQL

[TCPschool][2장] MySQL 문법 (1/2)

pythaac 2021. 7. 28. 04:13
이 글은 "TCPschool/코딩과 데이터/MySQL"을 읽고 주관적으로 작성된 글입니다.

https://tcpschool.com/mysql/intro

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

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 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씩 증가된 값 저장
      - 키워드 다음 대입 연산자(=)를 이용하여 시작값 변경 가능

 

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;