기본 문법
MySQL 구문
MySQL에서 데이터베이스에 대한 작업 명령은 SQL 구문을 이용하여 처리됩니다.
예제
SELECT * FROM Reservation;
서버와의 연결을 끊는 구문인 QUIT와 같은 경우를 제외한 일반적인 구문 뒤에는 세미콜론(;)을 붙입니다.
이러한 세미콜론은 SQL 구문을 구분하는 기준이 됩니다.
또한, MySQL은 키워드와 구문에서 대소문자를 구분하지 않습니다.
예제
1. SELECT * FROM Reservation;
2. select * from Reservation;
3. SeLeCt * FrOm Reservation;
위의 예제는 모두 같은 결과를 보여주겠지만, 되도록이면 1번이나 2번처럼 대소문자를 일관되게 사용하는 것이 좋습니다.
MySQL에서 키워드와 구문, 문자열은 대소문자를 구분하지 않습니다.
하지만 테이블 명과 필드의 이름은 대소문자를 구분하므로, 주의해서 사용해야 합니다.
MySQL 주석
주석이란 코드에 대한 이해를 돕는 설명을 적거나 디버깅을 위해 작성하는 일종의 메모입니다.
MySQL 서버는 주석을 무시하므로, 실제 실행 결과에는 아무런 영향을 주지 않습니다.
MySQL에서 주석을 작성하는 방법은 다음과 같습니다.
문법
1. # 한 줄 주석
2. -- 한 줄 주석
3. /* 두 줄
이상의
주석 */
위의 두 번째 방법에서 두 개 이상의 하이픈(-) 뒤에는 반드시 한 칸의 공백이 존재해야만 주석으로 정상 인식됩니다.
MySQL 주요 구문
1. CREATE DATABASE
2. ALTER DATABASE
3. CREATE TABLE
4. ALTER TABLE
5. DROP TABLE
6. INSERT INTO
7. UPDATE
8. DELETE
9. SELECT
10. CREATE INDEX
11. DROP INDEX
CREATE
MySQL에서는 다음과 같은 CREATE 문을 사용하여 데이터베이스와 테이블을 만들 수 있습니다.
1. CREATE DATABASE
2. CREATE TABLE
데이터베이스 생성
CREATE DATABASE 문은 새로운 데이터베이스를 생성해 줍니다.
문법
CREATE DATABASE 데이터베이스이름
다음 예제는 Hotel이라는 새로운 데이터베이스를 생성하는 예제입니다.
예제
CREATE DATABASE Hotel;
생성된 데이터베이스 목록은 SHOW DATABASES 구문을 통해 확인할 수 있습니다.
데이터베이스의 선택
데이터베이스를 생성한 후에, 해당 데이터베이스를 사용하기 위해서는 우선 데이터베이스를 선택해야 합니다.
MySQL에서는 USE 문을 사용하여 데이터베이스를 선택할 수 있습니다.
문법
USE 데이터베이스이름
다음 예제는 Hotel 데이터베이스를 선택하는 예제입니다.
예제
USE Hotel;
유닉스 환경의 MySQL에서는 데이터베이스 이름의 대소문자를 구분합니다.
그러나 윈도우 환경의 MySQL에서는 데이터베이스의 이름에 대소문자를 구분하지 않습니다.
하지만 될 수 있으면 언제나 데이터베이스의 이름은 대소문자를 구분하여 사용하는 것이 가독성 측면에서도 좋습니다.
테이블 생성
데이터베이스는 하나 이상의 테이블로 구성되며, 이러한 테이블에 데이터를 저장하여 관리할 수 있습니다.
CREATE TABLE 문은 새로운 테이블을 생성해 줍니다.
문법
CREATE TABLE 테이블이름
(
필드이름1 필드타입1,
필드이름2 필드타입2,
...
)
테이블을 생성하기 위해서는 테이블 이름, 필드(field) 목록과 각 필드의 타입을 명시해야 합니다.
필드의 타입이란 해당 필드에 저장될 데이터가 가질 수 있는 타입을 의미합니다.
MySQL에서는 위의 문법처럼 하나의 쿼리를 여러 줄에 걸쳐 입력할 수 있습니다.
제약 조건(constraint)
제약 조건(constraint)이란 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 의미합니다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나, ALTER 문으로 필드를 추가할 때도 설정할 수도 있습니다.
CREATE TABLE 문에서 사용할 수 있는 제약 조건은 다음과 같습니다.
1. NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
2. UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
3. PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.
4. FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.
5. DEFAULT : 해당 필드의 기본값을 설정합니다.
또한, AUTO_INCREMENT 키워드를 사용하면 해당 필드의 값을 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 저장합니다.
이때 AUTO_INCREMENT 키워드 다음에 대입 연산자(=)를 사용하여 시작값을 변경할 수 있습니다.
ALTER
MySQL에서는 다음과 같은 ALTER 문을 사용하여 데이터베이스와 테이블의 내용을 수정할 수 있습니다.
1. ALTER DATABASE
2. ALTER TABLE
데이터베이스 수정
ALTER DATABASE 문은 데이터베이스의 전체적인 특성을 수정할 수 있게 해줍니다.
이러한 데이터베이스의 특성은 데이터베이스 디렉터리의 db.opt 파일에 저장되어 있습니다.
다음과 같은 구문을 통해 데이터베이스의 문자 집합이나 콜레이션을 변경할 수 있습니다.
문법
1. ALTER DATABASE 데이터베이스이름 CHARACTER SET=문자집합이름
2. ALTER DATABASE 데이터베이스이름 COLLATE=콜레이션이름
콜레이션(collation)이란 데이터베이스에서 검색이나 정렬과 같은 작업을 할 때 사용하는 비교를 위한 규칙의 집합을 의미합니다.
다음 예제는 Hotel 데이터베이스의 문자 집합과 콜레이션을 변경하는 예제입니다.
예제
ALTER DATABASE Hotel CHARACTER SET=euckr_bin COLLATE=euckr_korean_ci;
자주 사용되는 대표적인 CHARACTER SET은 다음과 같습니다.
1. utf8 : UTF-8 유니코드를 지원하는 문자셋 (1~3바이트)
2. euckr : 한글을 지원하는 문자셋 (1~2바이트)
또한, 자주 사용되는 대표적인 COLLATE는 다음과 같습니다.
1. utf8_bin
2. utf8_general_ci (기본 설정)
3. euckr_bin
4. euckr_korean_ci
COLLATE에서 ci는 case-insensitive를 의미하며, 대소문자를 구분하지 않게 설정됩니다.
테이블 수정
ALTER TABLE 문은 테이블에 필드를 추가, 삭제하거나 필드의 타입을 변경할 수 있게 해줍니다.
1. ADD
2. DROP
3. MODIFY COLUMN
새로운 필드 추가
ALTER TABLE 문과 함께 ADD 문을 사용하면, 테이블에 필드를 추가할 수 있습니다.
문법
ALTER TABLE 테이블이름 ADD 필드이름 필드타입
기존 필드의 삭제
ALTER TABLE 문과 함께 DROP 문을 사용하면, 테이블의 필드를 삭제할 수 있습니다.
문법
ALTER TABLE 테이블이름 DROP 필드이름
필드 타입 변경
ALTER TABLE 문과 함께 MODIFY COLUMN 문을 사용하면, 테이블의 필드 타입을 변경할 수 있습니다.
문법
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입
DROP
MySQL에서는 다음과 같은 DROP 문을 사용하여 데이터베이스와 테이블을 삭제할 수 있습니다.
1. DROP DATABASE
2. DROP TABLE
데이터베이스 삭제
DROP DATABASE 문은 해당 데이터베이스를 삭제해 줍니다.
문법
DROP DATABASE 데이터베이스이름
데이터베이스를 삭제하면 해당 데이터베이스의 모든 테이블과 데이터도 다 같이 삭제되므로 주의해야 합니다.
다음 예제는 Hotel 데이터베이스를 삭제하는 예제입니다.
예제
DROP DATABASE Hotel;
테이블 삭제
DROP TABLE 문은 해당 테이블을 삭제해 줍니다.
문법
DROP TABLE 테이블이름
테이블을 삭제하면 해당 테이블의 모든 데이터도 다 같이 삭제되므로 주의해야 합니다.
만약 테이블 자체가 아닌 테이블의 데이터만을 지우고 싶을 때는 TRUNCATE TABLE 문을 사용할 수 있습니다.
이 구문을 사용하면 테이블 자체는 그대로 남게 되며, 해당 테이블에 저장된 데이터만이 모두 삭제됩니다.
문법
TRUNCATE TABLE 테이블이름
다음은 Reservation 테이블의 모든 데이터만을 삭제하는 예제입니다.
예제
TRUNCATE TABLE Reservation;
위의 예제가 실행된 후에 SELECT 문으로 Reservation 테이블의 모든 데이터를 불러오면, 해당 테이블에 어떠한 데이터도 저장되어 있지 않습니다.
다음 예제는 Reservation 테이블의 모든 데이터뿐만 아니라 테이블 그 자체도 삭제하는 예제입니다.
예제
DROP TABLE Reservation;
DROP DATABASE 문이나 DROP TABLE 문을 사용하여 데이터베이스나 테이블을 삭제하려고 할 때, 만약 삭제하려는 이름의 데이터베이스나 테이블이 존재하지 않으면 에러가 발생합니다.
이때 다음과 같이 IF EXISTS 절을 사용하면 삭제하려는 데이터베이스나 테이블이 존재하지 않아서 발생하는 에러를 미리 방지할 수 있습니다.
문법
1. DROP DATABASE IF EXISTS Hotel;
2. DROP TABLE IF EXISTS Reservation;
INSERT
MySQL에서는 INSERT INTO 문을 사용하여 테이블에 새로운 레코드를 추가할 수 있습니다.
테이블에 레코드 추가
INSERT INTO 문과 함께 VALUES 절을 사용하여 해당 테이블에 새로운 레코드를 추가할 수 있습니다.
문법
1. INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)
VALUES (데이터값1, 데이터값2, 데이터값3, ...)
2. INSERT INTO 테이블이름
VALUES (데이터값1, 데이터값2, 데이터값3, ...)
또한, 두 번째 문법처럼 필드의 이름을 생략할 수 있으며, 이 경우에는 데이터베이스의 스키마와 같은 순서대로 필드의 값이 자동 대입됩니다.
이때 생략할 수 있는 필드는 다음과 같습니다.
1. NULL을 저장할 수 있도록 설정된 필드
2. DEFAULT 제약 조건이 설정된 필드
3. AUTO_INCREMENT 키워드가 설정된 필드
UPDATE
MySQL에서는 UPDATE 문을 사용하여 레코드의 내용을 수정할 수 있습니다.
문법
UPDATE 테이블이름
SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...
WHERE 필드이름=데이터값
UPDATE 문은 해당 테이블에서 WHERE 절의 조건을 만족하는 레코드의 값만을 수정합니다.
DELETE
MySQL에서는 DELETE 문을 사용하여 테이블의 레코드를 삭제할 수 있습니다.
문법
DELETE FROM 테이블이름
WHERE 필드이름=데이터값
DELETE 문은 해당 테이블에서 WHERE 절의 조건을 만족하는 레코드만을 삭제합니다.
즉, 테이블에서 명시된 필드와, 그 값이 일치하는 레코드만을 삭제해 줍니다.
만약 WHERE 절을 생략하면, 해당 테이블에 저장된 모든 데이터가 삭제됩니다.
문법
DELETE FROM 테이블이름;
이때 테이블에 저장된 모든 데이터가 삭제되더라도 테이블은 여전히 남아있게 됩니다.
해당 테이블까지 삭제하고 싶을 때는 DROP TABLE 문을 사용해야 합니다.
SELECT
MySQL에서는 SELECT 문을 사용하여 테이블의 레코드를 선택할 수 있습니다.
문법
SELECT 필드이름
FROM 테이블이름
[WHERE 조건]
FROM 절은 레코드를 선택할 테이블의 이름을 명시합니다.
해당 테이블에서 선택하고 싶은 필드의 이름을 SELECT 키워드 바로 뒤에 명시하면 됩니다.
이때 WHERE 절을 사용하면, 선택할 레코드의 조건을 좀 더 상세히 설정할 수 있습니다.
테이블의 모든 필드 선택
SELECT 문과 함께 별표(*) 기호를 사용하면, 해당 테이블의 모든 필드를 선택할 수 있습니다.
문법
SELECT *
FROM 테이블이름
이 방식은 해당 테이블의 '모든 필드'를 선택해야 할 경우에 유용하게 사용할 수 있습니다.
댓글