데이터베이스에서 데이터를 조작하거나 조회하기 위해 사용하는 표준 언어.
절차나 기술하는 것이 아닌 조건을 기술하여 작성한다.
// 로우 삽입
INSERT INTO tbl_name (col1,col2) VALUES(14,15);
// 아래 두 쿼리문은 동일하다.
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);
INSERT INTO tbl_name (a,b,c) VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
// 로우 수정
UPDATE [TABLE명] SET id = id + 1 [WHERE조건];
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
// 로우 삭제
DELETE FROM [TABLE명] [WHERE조건]
// 조건 삭제
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
우선 공식문서에 나와있는 SELECT문의 모든 옵션을 살펴보자.
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[into_option]
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}
SELECT 문
은 기본적으로 테이블의 로우 중에서 원하는 컬럼이나 모든 컬럼의 값을 선택하여 출력? 하는 데 사용하는 명령문이다.FROM
뒤에 적힌 테이블을 기준으로 하며WHERE
문이 존재한다면 테이블에서WHERE
문 뒤에 적힌 조건을 만족하는 로우들 중에서 값을 출력?한다.SELECT name, age, address FROM user; SELECT * FROM user WHERE age=20;
[출처: https://developpaper.com/mysql-foundation-04-query/]
JOIN
은 데이터베이스 내의 여러 테이블에서 가져온 로우를 조합하여 하나의 테이블이나 결과 집합으로 표현해 준다. 보통SELECT
와 함께 자주 사용된다.
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
// 데이터베이스 생성
CREATE DATABASE justgram_2
[OPTION]
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
// 테이블 생성
CREATE TABLE user
(
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id varchar(100) NOT NULL UNIQUE,
password varchar(100) NOT NULL,
name varchar(100) NOT NULL,
nickname varchar(100) NOT NULL,
email varchar(100) NOT NULL,
phone_number varchar(100) NOT NULL,
profile_image_url varchar(2000),
created_at timestamp NOT NULL default current_timestamp,
updated_at timestamp NOT NULL default current_timestamp ON UPDATE current_timestamp
);
CREATE TABLE feed(
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id int NOT NULL,
content varchar(2000),
created_at timestamp NOT NULL default current_timestamp,
updated_at timestamp NOT NULL default current_timestamp ON UPDATE current_timestamp,
FOREIGN KEY(user_id) REFERENCES user(id) ON DELETE CASCADE
);
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
CREATE [DATABASE명]
명령어로 데이터베이스 생성DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
옵션으로 테이블 생성할 때, 기본 인코딩을 UTF8로 설정CREATE TABLE [TABLE명]([COLUMN명 데이터타입 [DEFAULT 값 | 제약조건])
명령어로 테이블 생성NOT NULL
: 해당 컬럼값 NULL 입력 방지AUTO_INCREMENT
: 로우가 생성될 때마다 자동으로 증가되게 설정PRIMARY KEY
: 해당 컬럼을 로우 식별자로 설정DEFAULT CURRENT_TIMESTAMP [ON UPDATE CURRENT TIMESTAMP]
: 로우가 생성될 때 기본값으로 현재 시간 설정(괄호 안 옵션이 있다면 로우가 변경될 때마다 현재 시간으로 변경)FOREIGN KEY(user_id) REFERENCES [TABLE명](id) [ON DELETE CASCADE]
: 해당 테이블 생성문에서 user_id가 TABLE명의 id를 참조하는 제약 조건을 설정하는 예제이다. 뒤 옵션으로 ON DELETE CASCADE를 부여하면 참조 테이블의 로우를 삭제할 경우 연결된 테이블의 로우가 함께 삭제된다. 연결된 데이터를 한 번에 지울 수 있어 데이터 관리가 편리해지고 일관성을 유지할 수 있다.(ON UPDATE CASCADE 옵션도 존재한다)ALTER TABLE [TABLE명] OPTION
: 테이블에 필드를 추가, 삭제, 수정할 때 사용한다. 옵션이 많기 때문에 아래 사이트를 참고하면 좋다.
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
-- 사용자 권한 부여 명령어
GRANT 권한종류 ON 대상 TO 계정명 IDENTIFIED BY 암호 [WITH GRANT OPTION];
예제)
-- 모든 권한을 가진 계정 생성
GRANT ALL ON *.* TO test@localhost IDENTIFIED BY "test1";
-- 특정 데이터베이스에 조회권한을 가진 계정 생성
GRANT SELECT ON test.* TO test@localhost IDENTIFIED BY "test1";
-- GRANT로 계정생성 후 아래의 명령어를 실행해야 적용됩니다.
FLUSH privileges;
-- 권한 해제 명령어
REVOKE insert, update, create ON [DB명.테이블명] TO [user@host];
-- 전체 권한 해제 명령어
REVOKE ALL ON [DB명.테이블명] TO [user@host];
-- 작업한 결과를 물리적 디스크로 저장하고, 조작 작업이 완료됨을 사용자에게 알려주는 명령어
COMMIT;
-- 작업했던 내용을 원래의 상태로 복구하기 위한 명령어
ROLLBACK;