MySQL 특징
- 키워드, 구문, 문자열의 대소문자를 구분하지 않음!
(Windows의 경우 테이블명, 데이터베이스명도 대소문자를 구분하지 않음)- 데이터베이스 == 스키마 (DATABASE == SCHEMA)
→ SHOW
, DESC
, USE
→ CREATE
, DROP
, ALTER
(DDL 데이터 정의어)
-- 데이터베이스 목록 조회
SHOW DATABASES;
-- 현재 접속한 스키마의 테이블 목록 조회
SHOW TABLES;
-- 테이블 컬럼 조회
DESC 테이블;
-- 사용할 데이터베이스 선택, 접속
USE 데이터베이스;
-- 데이터베이스 생성
CREATE DATABASE 데이터베이스;
CREATE SCHEMA 스키마;
-- 테이블 생성
CREATE TABLE 테이블(컬럼1 타입1 제약조건, 컬럼2 타입2 제약조건);
-- 테이블 복제
CREATE TABLE 테이블 LIKE 테이블;
-- 테이블 복사(컬럼 선택)
CREATE TABLE 테이블 AS SELECT 컬럼 FROM 테이블;
-- ㄴ Aliasing하면 컬럼명 변경 가능
DROP DATABASE 데이터베이스;
DROP TABLE 테이블;
RENAME
-- 테이블 이름 변경
ALTER TABLE 기존테이블명 RENAME TO 변경테이블명;
-- 컬럼 이름 변경
ALTER TABLE 테이블 RENAME COLUMN 기존컬럼명 TO 변경컬럼명;
ADD
-- 컬럼 추가
ALTER TABLE 테이블 ADD 컬럼 타입 [제약조건] [AFTER 앞에 위치할 컬럼];
-- 키 추가
ALTER TABLE 테이블 ADD PRIMARY KEY(컬럼);
MODIFY
, CHANGE
-- 컬럼 타입 변경
ALTER TABLE 테이블 MODIFY 컬럼 타입;
-- 컬럼 이름과 타입 변경
ALTER TABLE 테이블 CHANGE 기존컬럼명 변경컬럼명 타입;
DROP
-- 컬럼 삭제
ALTER TABLE 테이블명 DROP 컬럼;
-- 키 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY;
→ INSERT
, DELETE
, SELECT
, UPDATE
-- 레코드 삽입
INSERT INTO 테이블(컬럼1, 컬럼2) values(값1, 값2);
-- 조건에 해당하는 데이터 삭제
DELETE FROM 테이블 WHERE 컬럼 = 값
-- WORKBENCH로 데이터 수정 시 설정 필요
SET sql_safe_updates = 0;
-- 조건에 해당하는 데이터 수정
UPDATE 테이블
SET 컬럼 = 변경값
WHERE 컬럼 = 기존값
SELECT 컬럼 FROM 테이블
WHERE
SELECT 컬럼
FROM 테이블
WHERE 검색조건;
GROUP BY
+ 그룹화조건 HAVING
SELECT 컬럼
FROM 테이블
WHERE 검색조건
GROUP BY 컬럼
HAVING 그룹화조건;
ORDER BY
→ 오름차순(ASC
생략가능), 내림차순(DESC
)SELECT 컬럼
FROM 테이블
WHERE 조건
ORDER BY 컬럼 [ASC 또는 DESC];
DISTINCT
SELECT DISTINCT 컬럼
FROM 테이블
WHERE 검색조건;
CASE
SELECT CASE 컬럼
WHEN 비교값 THEN 반환값
WHEN 비교값 THEN 반환값
ELSE 반환값
END AS 가명
FROM 테이블;
Subquery
: 쿼리 안에 쿼리 (메인 쿼리에 종속되는 쿼리)<SELECT 구문 위치별 서브쿼리 조건>
SELECT + (단일 행 && 단일 열)을 반환하는 서브쿼리
FROM + aliasing이 된 서브쿼리
: 데이터를 인가되지 않은 방법으로 변경할 수 없도록 보호하는 성질
→ 데이터 무결성을 위해 컬럼에 다음과 같은 제약 조건을 걸 수 있음
키워드 | null 허용 | 중복 허용 | 특징 |
---|---|---|---|
primary key (기본키) | x | x | 테이블의 대표 컬럼 (하나만 설정 가능) |
unique key (고유키) | O | x | 테이블에 유일한 값으로 존재하도록 설정 |
foreign key (외래키) | O | O | 참조테이블과 연결 목적으로, 참조테이블에서는 기본키이며, 참조테이블에 존재하는 값만 사용 가능! |
not null | x | O | 필수 입력 사항 |
check | O | O | 주어진 조건에 해당하는 값들만 사용 가능 |
cf) 컬럼 기본값 설정 : DEFAULT
cf) 자동 값 증가 컬럼 : AUTO_INCREMENT
(Sequence 기능)
-- 기본키, 고유키, 외래키 ( + auto_increment)
CREATE TABLE tb1(
col_id INT PRIMARY KEY
);
CREATE TABLE tb2(
seq INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(20) UNIQUE,
col2 VARCHAR(10) UNIQUE KEY,
col_id INT,
FOREIGN KEY(col_id) REFERENCES tb1(col_id)
);
-- not null, check (+ default)
CREATE TABLE tb_check(
col1 VARCHAR(5) NOT NULL,
col2 VARCHAR(20) DEFAULT 0,
CONSTRAINT ck1 CHECK(col1 IN('Yes', 'No')),
CONSTRAINT ck2 CHECK(col2 >= 0 AND col2 < 100)
);