mysql -u root -p | root로 연결 |
mysql -u user -p -h hostname | 원격 호스트 연결 |
mysql -u user -p database_name | 특정 데이터베이스 연결 |
exit; or quit; | MySQL 종료 |
mysql -u user -p < script.sql | SQL 파일 실행 |
SHOW DATABASES; | 모든 데이터베이스 목록 |
CREATE DATABASE dbname; | 데이터베이스 생성 |
CREATE DATABASE dbname CHARACTER SET utf8mb4; | 문자셋과 함께 생성 |
DROP DATABASE dbname; | 데이터베이스 삭제 |
USE dbname; | 데이터베이스 선택 |
SELECT DATABASE(); | 현재 데이터베이스 표시 |
SHOW TABLES; | 테이블 목록 |
DESCRIBE tablename; | 테이블 구조 표시 |
SHOW CREATE TABLE tablename; | CREATE 문 표시 |
DROP TABLE tablename; | 테이블 삭제 |
TRUNCATE TABLE tablename; | 테이블 비우기 (빠름) |
RENAME TABLE old TO new; | 테이블 이름 변경 |
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100)); | 기본 테이블 |
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE); | 제약조건 포함 |
CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id)); | 외래 키 포함 |
CREATE TABLE IF NOT EXISTS tablename (...); | 없으면 생성 |
INT, BIGINT, SMALLINT, TINYINT | 정수 타입 |
DECIMAL(10,2), FLOAT, DOUBLE | 소수/실수 타입 |
VARCHAR(255), CHAR(10), TEXT | 문자열 타입 |
DATE, DATETIME, TIMESTAMP, TIME | 날짜/시간 타입 |
BOOLEAN, BOOL | 불리언 (TINYINT(1) 별칭) |
BLOB, MEDIUMBLOB, LONGBLOB | 바이너리 데이터 |
JSON | JSON 데이터 타입 |
ENUM('a','b','c') | 열거형 |
ALTER TABLE t ADD column_name VARCHAR(100); | 열 추가 |
ALTER TABLE t DROP COLUMN column_name; | 열 삭제 |
ALTER TABLE t MODIFY column_name INT NOT NULL; | 열 수정 |
ALTER TABLE t CHANGE old_name new_name INT; | 열 이름 변경 |
ALTER TABLE t ADD INDEX idx_name (column); | 인덱스 추가 |
ALTER TABLE t ADD PRIMARY KEY (id); | 기본 키 추가 |
ALTER TABLE t DROP INDEX idx_name; | 인덱스 삭제 |
SELECT * FROM users; | 모든 열 선택 |
SELECT id, name FROM users; | 특정 열 선택 |
SELECT * FROM users WHERE age > 18; | 조건 포함 |
SELECT * FROM users ORDER BY name ASC; | 정렬 |
SELECT * FROM users LIMIT 10; | 결과 제한 |
SELECT * FROM users LIMIT 10 OFFSET 20; | 페이지네이션 |
SELECT DISTINCT category FROM products; | 고유 값 |
SELECT * FROM users WHERE name LIKE "J%"; | 패턴 매칭 |
INSERT INTO users (name, email) VALUES ('John', 'john@email.com'); | 단일 행 삽입 |
INSERT INTO users (name) VALUES ('A'), ('B'), ('C'); | 여러 행 삽입 |
INSERT INTO t2 SELECT * FROM t1 WHERE condition; | SELECT에서 삽입 |
INSERT INTO users SET name='John', email='j@e.com'; | SET으로 삽입 |
INSERT IGNORE INTO users ...; | 중복 무시 |
UPDATE users SET name='Jane' WHERE id=1; | 단일 행 업데이트 |
UPDATE users SET age=age+1 WHERE birthday=CURDATE(); | 표현식으로 업데이트 |
UPDATE users SET status='active' WHERE status='pending' LIMIT 10; | 제한 업데이트 |
DELETE FROM users WHERE id=1; | 단일 행 삭제 |
DELETE FROM users WHERE age < 18; | 조건으로 삭제 |
DELETE FROM users; | 모든 행 삭제 |
SELECT * FROM a INNER JOIN b ON a.id = b.a_id; | 내부 조인 |
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id; | 왼쪽 조인 |
SELECT * FROM a RIGHT JOIN b ON a.id = b.a_id; | 오른쪽 조인 |
SELECT * FROM a CROSS JOIN b; | 크로스 조인 |
SELECT * FROM a JOIN b USING (column); | 열을 사용한 조인 |
SELECT * FROM a NATURAL JOIN b; | 자연 조인 |
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders); | WHERE 서브쿼리 |
SELECT *, (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) as order_count FROM users; | SELECT 서브쿼리 |
SELECT * FROM (SELECT * FROM users LIMIT 10) AS subquery; | FROM 서브쿼리 |
SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE user_id = users.id); | EXISTS 서브쿼리 |
SELECT COUNT(*) FROM users; | 행 수 |
SELECT COUNT(DISTINCT category) FROM products; | 고유 값 수 |
SELECT SUM(amount) FROM orders; | 합계 |
SELECT AVG(price) FROM products; | 평균 |
SELECT MIN(price), MAX(price) FROM products; | 최소/최대 |
SELECT GROUP_CONCAT(name) FROM users; | 값 연결 |
SELECT category, COUNT(*) FROM products GROUP BY category; | 그룹화 |
SELECT category, COUNT(*) FROM products GROUP BY category HAVING COUNT(*) > 5; | Having 절 |
SELECT YEAR(created_at), COUNT(*) FROM orders GROUP BY YEAR(created_at); | 연도별 그룹화 |
SELECT category, SUM(price) as total FROM products GROUP BY category WITH ROLLUP; | 롤업 포함 |
CREATE INDEX idx_name ON table (column); | 인덱스 생성 |
CREATE UNIQUE INDEX idx_name ON table (column); | 유니크 인덱스 생성 |
CREATE INDEX idx ON table (col1, col2); | 복합 인덱스 |
CREATE FULLTEXT INDEX idx ON table (column); | 전문 인덱스 |
SHOW INDEX FROM tablename; | 인덱스 표시 |
DROP INDEX idx_name ON tablename; | 인덱스 삭제 |
EXPLAIN SELECT * FROM users WHERE id=1; | 쿼리 설명 |
EXPLAIN ANALYZE SELECT ...; | 분석 포함 설명 |
SHOW PROCESSLIST; | 실행 중인 쿼리 표시 |
OPTIMIZE TABLE tablename; | 테이블 최적화 |
ANALYZE TABLE tablename; | 통계 업데이트 |
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; | 사용자 생성 |
DROP USER 'user'@'localhost'; | 사용자 삭제 |
ALTER USER 'user'@'localhost' IDENTIFIED BY 'newpass'; | 비밀번호 변경 |
SELECT user, host FROM mysql.user; | 사용자 목록 |
GRANT ALL PRIVILEGES ON db.* TO 'user'@'localhost'; | 데이터베이스 전체 권한 |
GRANT SELECT, INSERT ON db.table TO 'user'@'localhost'; | 특정 권한 부여 |
REVOKE ALL PRIVILEGES ON db.* FROM 'user'@'localhost'; | 권한 취소 |
SHOW GRANTS FOR 'user'@'localhost'; | 사용자 권한 표시 |
FLUSH PRIVILEGES; | 권한 다시 로드 |