Database

[MySQL] MySQL 문법: 1

Anna-Jin 2022. 2. 20. 19:09
728x90

http://www.tcpschool.com/mysql/mysql_basic_create

 

코딩교육 티씨피스쿨

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

tcpschool.com

 


CREATE

1. 데이터베이스 생성

CREATE문을 이용하여 새로운 데이터베이스를 생성할 수 있다.

 

DB 생성

CREATE DATABASE 데이터베이스명;

 

DB목록 보기

SHOW DATABASES;

 

 

2. 데이터베이스 선택

데이터베이스를 생성한 후에, 데이터베이스를 사용하려면 우선 데이터베이스를 선택해야한다.

 

DB 선택

USE 데이터베이스명;

 

 

3. 테이블 생성

데이터베이스는 하나 이상의 테이블로 구성되며, 이러한 테이블에 데이터를 저장하여 관리할 수 있다.

CREATE문을 이용하여 새로운 테이블을 생성할 수 있다.

 

테이블을 생성할 떄에는 테이블 이름, 컬럼 목록과 각 컬럼의 타입을 명시해야하는데, 컬럼의 타입이란 해당 컬럼에 저장될 데이터가 가질 수 있는 타입을 의미한다.

 

CREATE TABLE 테이블명
(
    컬럼명1 컬럼타입1,
    컬럼이름2 컬럼타입2,
    ....
);

 

예시 1)

CREATE TABLE test
(
    ID INT,
    Name VARCHAR(30),
    ReservaeDate DATE,
    RoomNum INT
);

실행결과

 

 

예시 2)

CREATE TABLE person
(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth DATE NOT NULL
);

실행결과

 

성공적으로 테이블이 추가된 것을 DESCRIBE 명령문으로 확인할 수 있다.

 

 

컬럼 타입

다양한 컬럼 타입이 있지만 자세한 타입들은 다음 강에 설명되어있어서 자주 사용될 만한 것들만 따로 간단히 정리해보았다.

자료형 설명
int 정수(4 Byte)
int unsigned unsigned는 속성값으로, 양수(음수의 범위만큼 양수의 범위로 더 사용할 수 있다.)
tinyint 정수(1 Byte)
bigint 정수(8 Byte)
char(n) 고정형 문자. n은 글자수를 의미.
최대 255까지 가능사이즈를 아는 고정된 문자를 저장할 때 사용저장된 글자수가 n 보다 작으면 공백을 채운다.
varchar(n) 가변형 문자. n은 글자수를 의미.
최대 65,535까지 가능
집주소처럼 변화가 있는 값을 저장하는데 사용
text 가변형 큰 문자 데이터 저장검색을 위한 인덱스가 제공되지 않음
bool 또는 boolean true 또는 false 값 저장데이터는 0(false)과 1(true)로 들어간다.
datetime 날짜 저장. 타임존 지원 안함
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 날짜 저장. 타임존 지원
1970-01-01 00:00:01 ~ 2038-01-19 03:14:07
json JSON 데이터를 저장
enum(값1, 값2...) 정의한 값만 저장할 수 있는 타입

 

제약 조건

제약 조건(constraint)이란 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 의미한다.

이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나, ALTER 문으로 컬럼을 추가할 때도 설정할 수도 있다.

 

CREATE TABLE 문에서 사용할 수 있는 제약 조건

  1. NOT NULL : 해당 컬럼은 NULL 값을 저장할 수 없음
  2. UNIQUE : 해당 컬럼은 서로 다른 값을 가져야함
  3. PRIMARY KEY : 해당 컬럼이 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됨
  4. FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듦
  5. DEFAULT : 해당 컬럼의 기본값을 설정.
  6. ENGINE(Storage Engine) : 동시성 제어나 데이터베이스의 내부 구조 제어를 담당하는 엔진 설정. 
    대표적인 스토리지 엔진으로 InnoDB, MyISAM 등이 있으나 MySQL 5.5 부터 기본 엔진이 InnoDB로 변경되었다.
  7. CHARSET : 문자열 set의 종류. utf8mb4로 설정 시 이모지(emoji)가 저장될 수 있다.

 

또한, AUTO_INCREMENT 키워드를 사용하면 해당 컬럼의 값을 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 저장한다. 이때 AUTO_INCREMENT 키워드 다음에 대입 연산자(=)를 사용하여 시작값을 변경할 수 있다.

 


ALTER

ALTER문으로 데이터베이스와 테이블 내용을 수정할 수 있다. 

 

1. 테이블 수정

테이블명 변경

ALTER TABLE 테이블명 RENAME 변경할 테이블명;
ALTER TABLE person CHANGE user;

 

컬럼 추가

ALTER TABLE 테이블이름 ADD 컬럼명 컬럼타입;
ALTER TABLE user ADD hobby VARCHAR(20) NOT NULL;

 

컬럼명 변경

ALTER TABLE 테이블명 CHANGE 기존컬럼명 변경할컬럼명 컬럼타입;
ALTER TABLE user CHANGE birth birthDay Date NOT NULL;

 

컬럼 타입 변경

ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼명 컬럼타입;

 

 

컬럼 순서 변경

ALTER TABLE 테이블명 MODIFY 순서변경할컬럼명 컬럼타입 AFTER 앞에오는컬럼명;

 

 

컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
ALTER TABLE user DROP COLUMN hobby;

DROP

1. 데이터베이스 삭제

DROP DATABASE 데이터베이스명;

데이터베이스를 삭제하면 모든 테이블과 데이터도 다 삭제되므로 주의!!!!

 

 

2. 테이블 삭제

테이블 삭제

DROP TALBE 테이블명;

 

테이블의 데이터만 삭제

TRUNCATE TABLE 테이블명;

TRUNCATE문을 사용하면 테이블 자체는 그대로 남고, 테이블에 저장된 데이터만 삭제된다.

 

 

IF EXISTS문으로 DROP 에러 방지

DROP DATABASE IF EXISTS 데이터베이스명;
DROP TABLE IF EXISTS 테이블명;

INSERT

INSERT문을 이용해서 테이블에 새로운 데이터를 넣을 수 있다.

 

INSERT INTO 테이블명(컬럼명1, 컬럼명2, 컬럼명3, ...)
VALUES (데이터1, 데이터2, 데이터3, ...);

혹은 컬럼명 생략 가능

INSERT INTO 테이블명
VALUES (데이터1, 데이터2, 데이터3, ...);

후자 문법처럼 컬럼의 이름을 생략할 수 있고, 이 경우에는 데이터베이스의 스키마와 같은 순서대로 컬럼의 값이 자동 대입된다.

하지만 생략할 수 있는 컬럼는 다음으로 한정되어있다.

 

  1. NULL을 저장할 수 있는 컬럼
  2. DEFAULT 제약 조건이 설정된 컬럼
    ex) 생성일과 수정일을 나타내기위해 추가하는 create_at과 updated_at
  3. AUTO_INCREMENT 키워드가 설정된 컬럼
    ex) 가장 기본으로 생성하는 id

우선

기존의 테이블에 id와 create_at, updated_at을 추가했다.

ALTER TABLE user
ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

ALTER TABLE user
ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

created_at 컬럼은 생성 시 자동으로 생성일과 시간이 저장되고 updated_at 컬럼은 생성 시 자동으로 날짜와 시간이 기록되는 것과 더불어 테이블이 UPDATE될 때 수정된 시간이 저장된다.

 

 

이어서

INSERT문을 사용해보자

 

user 테이블 정보

 

INSERT INTO user
(name, birthDay)
VALUES
('홍길동', '1999-01-01', null, null)
, ('임꺽정', '1998-02-02', null, null);

주의해야할 점은 문자열에는 꼭 따옴표('')를 사용해야한다.

 

 

정상적으로 추가된 것을 볼 수 있다.

728x90

'Database' 카테고리의 다른 글

[MySQL] 제약 조건  (0) 2022.03.02
[MySQL] 연산자와 함수  (0) 2022.03.01
[MySQL] 타입: 숫자, 문자열, 날짜와 시간  (0) 2022.03.01
[MySQL] MySQL문법: 2  (0) 2022.02.27
[MySQL] MySQL : 시작하기  (0) 2022.02.14