http://www.tcpschool.com/mysql/mysql_basic_create
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 문에서 사용할 수 있는 제약 조건
- NOT NULL : 해당 컬럼은 NULL 값을 저장할 수 없음
- UNIQUE : 해당 컬럼은 서로 다른 값을 가져야함
- PRIMARY KEY : 해당 컬럼이 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됨
- FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듦
- DEFAULT : 해당 컬럼의 기본값을 설정.
- ENGINE(Storage Engine) : 동시성 제어나 데이터베이스의 내부 구조 제어를 담당하는 엔진 설정.
대표적인 스토리지 엔진으로 InnoDB, MyISAM 등이 있으나 MySQL 5.5 부터 기본 엔진이 InnoDB로 변경되었다. - 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, ...);
후자 문법처럼 컬럼의 이름을 생략할 수 있고, 이 경우에는 데이터베이스의 스키마와 같은 순서대로 컬럼의 값이 자동 대입된다.
하지만 생략할 수 있는 컬럼는 다음으로 한정되어있다.
- NULL을 저장할 수 있는 컬럼
- DEFAULT 제약 조건이 설정된 컬럼
ex) 생성일과 수정일을 나타내기위해 추가하는 create_at과 updated_at - 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문을 사용해보자
INSERT INTO user
(name, birthDay)
VALUES
('홍길동', '1999-01-01', null, null)
, ('임꺽정', '1998-02-02', null, null);
주의해야할 점은 문자열에는 꼭 따옴표(''
)를 사용해야한다.
정상적으로 추가된 것을 볼 수 있다.
'Study > 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 |