############################################
# 1. AWS CLI - RDS / Aurora 리소스 조회
############################################
# 현재 계정/리전에 있는 모든 RDS DB 인스턴스 정보를 조회
# 일반 RDS MySQL 인스턴스 정보 확인할 때 사용
aws rds describe-db-instances
# 특정 DB 인스턴스 하나만 조회
# mydbinstance 자리에 실제 DB 인스턴스 식별자 입력
aws rds describe-db-instances --db-instance-identifier mydbinstance
# 현재 계정/리전에 있는 모든 Aurora DB 클러스터 정보를 조회
# Aurora는 인스턴스보다 클러스터 중심으로 관리되는 경우가 많음
aws rds describe-db-clusters
# 특정 Aurora 클러스터 하나만 조회
# my-aurora-cluster 자리에 실제 클러스터 식별자 입력
aws rds describe-db-clusters --db-cluster-identifier my-aurora-cluster
# 특정 Aurora 클러스터의 상세 정보를 조회
# 결과에서 Writer Endpoint, Reader Endpoint 등을 확인 가능
aws rds describe-db-clusters --db-cluster-identifier my-aurora-cluster
# 모든 RDS 스냅샷 조회
# 일반 DB 인스턴스 백업 상태 확인할 때 사용
aws rds describe-db-snapshots
# 모든 Aurora 클러스터 스냅샷 조회
# Aurora는 클러스터 단위 스냅샷을 따로 봄
aws rds describe-db-cluster-snapshots
############################################
# 2. AWS CLI - RDS / Aurora 생성
############################################
# 일반 RDS MySQL DB 인스턴스 생성
# db.t3.micro 인스턴스 타입, mysql 엔진, 저장소 20GB로 생성
aws rds create-db-instance \\
--db-instance-identifier mydbinstance \\
--db-instance-class db.t3.micro \\
--engine mysql \\
--allocated-storage 20 \\
--master-username admin \\
--master-user-password 'MyPassword123!' \\
--backup-retention-period 7 \\
--publicly-accessible
# Aurora MySQL 클러스터 생성
# Aurora는 먼저 클러스터를 만든 뒤 그 안에 인스턴스를 붙이는 구조
aws rds create-db-cluster \\
--db-cluster-identifier my-aurora-cluster \\
--engine aurora-mysql \\
--master-username admin \\
--master-user-password 'MyPassword123!'
# Aurora 클러스터에 DB 인스턴스를 추가
# 위에서 만든 my-aurora-cluster 안에 실제 동작할 인스턴스를 생성
aws rds create-db-instance \\
--db-instance-identifier aurora-instance-1 \\
--db-instance-class db.t3.medium \\
--engine aurora-mysql \\
--db-cluster-identifier my-aurora-cluster
############################################
# 3. AWS CLI - 수정 / 재부팅 / 시작 / 중지
############################################
# RDS DB 인스턴스 타입 변경
# 예: db.t3.micro -> db.t3.small
# --apply-immediately 옵션으로 즉시 반영
aws rds modify-db-instance \\
--db-instance-identifier mydbinstance \\
--db-instance-class db.t3.small \\
--apply-immediately
# Aurora 클러스터 설정 수정
# 백업 보관 기간을 7일로 설정
aws rds modify-db-cluster \\
--db-cluster-identifier my-aurora-cluster \\
--backup-retention-period 7 \\
--apply-immediately
# 특정 RDS DB 인스턴스를 재부팅
# 엔진 재시작이 필요할 때 사용
aws rds reboot-db-instance --db-instance-identifier mydbinstance
# 일반 RDS DB 인스턴스 중지
# 비용 절감이나 일시 중단 목적
aws rds stop-db-instance --db-instance-identifier mydbinstance
# 일반 RDS DB 인스턴스 시작
# 중지된 인스턴스를 다시 실행
aws rds start-db-instance --db-instance-identifier mydbinstance
# Aurora 클러스터 중지
# Aurora는 인스턴스보다 클러스터 단위 중지/시작을 자주 사용
aws rds stop-db-cluster --db-cluster-identifier my-aurora-cluster
# Aurora 클러스터 시작
aws rds start-db-cluster --db-cluster-identifier my-aurora-cluster
############################################
# 4. AWS CLI - 삭제
############################################
# 일반 RDS 인스턴스를 최종 스냅샷 없이 바로 삭제
# 시험/실습에서는 빠르게 지울 때 자주 사용
aws rds delete-db-instance \\
--db-instance-identifier mydbinstance \\
--skip-final-snapshot
# 일반 RDS 인스턴스를 최종 스냅샷 남기고 삭제
# 삭제 전 마지막 백업을 보존하고 싶을 때 사용
aws rds delete-db-instance \\
--db-instance-identifier mydbinstance \\
--final-db-snapshot-identifier mydb-final-snapshot
# Aurora 인스턴스를 먼저 삭제
# Aurora는 보통 클러스터 안의 인스턴스를 먼저 지워야 함
aws rds delete-db-instance \\
--db-instance-identifier aurora-instance-1 \\
--skip-final-snapshot
# Aurora 클러스터를 최종 스냅샷 없이 삭제
# 클러스터 내 인스턴스를 먼저 정리한 뒤 실행하는 경우가 많음
aws rds delete-db-cluster \\
--db-cluster-identifier my-aurora-cluster \\
--skip-final-snapshot
############################################
# 5. AWS CLI - 로그 / 백업 / 복원
############################################
# 특정 DB 인스턴스의 로그 파일 목록 조회
# 에러 로그, 일반 로그 등 확인 가능
aws rds describe-db-log-files --db-instance-identifier mydbinstance
# 특정 로그 파일 내용을 일부 다운로드해서 확인
# mysql-error.log 파일의 내용을 읽어볼 때 사용
aws rds download-db-log-file-portion \\
--db-instance-identifier mydbinstance \\
--log-file-name error/mysql-error.log
# 일반 RDS 인스턴스의 수동 스냅샷 생성
aws rds create-db-snapshot \\
--db-instance-identifier mydbinstance \\
--db-snapshot-identifier mydb-snapshot-01
# Aurora 클러스터 수동 스냅샷 생성
aws rds create-db-cluster-snapshot \\
--db-cluster-identifier my-aurora-cluster \\
--db-cluster-snapshot-identifier mycluster-snapshot-01
# 일반 RDS 인스턴스를 스냅샷으로 복원
# 복원 결과로 새 DB 인스턴스가 생성됨
aws rds restore-db-instance-from-db-snapshot \\
--db-instance-identifier mydb-restored \\
--db-snapshot-identifier mydb-snapshot-01
# Aurora 클러스터를 클러스터 스냅샷으로 복원
# 복원 시 새 Aurora 클러스터가 생성됨
aws rds restore-db-cluster-from-snapshot \\
--db-cluster-identifier restored-aurora-cluster \\
--snapshot-identifier mycluster-snapshot-01 \\
--engine aurora-mysql
############################################
# 6. MySQL 접속 명령어
############################################
# MySQL / Aurora MySQL 서버에 접속
# -h 는 엔드포인트 주소
# -P 는 포트 번호(기본 3306)
# -u 는 사용자명
# -p 는 비밀번호 입력 프롬프트 표시
mysql -h 엔드포인트 -P 3306 -u admin -p
# 특정 데이터베이스를 바로 선택해서 접속
mysql -h 엔드포인트 -P 3306 -u admin -p 데이터베이스명
############################################################
# 1. 데이터베이스(Database) 관련
############################################################
-- 현재 MySQL 서버 안에 존재하는 모든 데이터베이스 목록을 보여줌
-- 예: information_schema, mysql, performance_schema, appdb 등
SHOW DATABASES;
-- appdb 라는 이름의 새 데이터베이스를 생성
-- DATABASE 는 여러 테이블을 담는 큰 저장 공간이라고 생각하면 됨
CREATE DATABASE appdb;
-- 이미 있는 데이터베이스를 사용 대상으로 선택
-- 이 뒤에 만드는 테이블은 appdb 안에 생성됨
USE appdb;
-- appdb 데이터베이스를 삭제
-- 안에 들어있는 테이블, 데이터, 구조가 전부 사라짐
DROP DATABASE appdb;
############################################################
# 2. 테이블(Table) 생성과 구조 이해
############################################################
-- 현재 선택한 데이터베이스 안에 있는 테이블 목록 조회
SHOW TABLES;
-- users 라는 테이블 생성
CREATE TABLE users (
-- id 컬럼
-- INT: 정수형 숫자
-- AUTO_INCREMENT: 새 행이 들어올 때 1씩 자동 증가
-- PRIMARY KEY: 기본키, 각 행을 구분하는 대표값, 중복 불가, NULL 불가
id INT AUTO_INCREMENT PRIMARY KEY,
-- name 컬럼
-- VARCHAR(100): 최대 100자의 가변 길이 문자열
-- NOT NULL: 반드시 값이 있어야 함, 비워둘 수 없음
name VARCHAR(100) NOT NULL,
-- email 컬럼
-- VARCHAR(100): 최대 100자 문자열
-- UNIQUE: 중복 불가, 같은 이메일 두 번 저장 불가
email VARCHAR(100) UNIQUE,
-- age 컬럼
-- INT: 나이를 숫자로 저장
-- NULL 허용이므로 입력 안 해도 됨
age INT,
-- created_at 컬럼
-- TIMESTAMP: 날짜와 시간을 저장
-- DEFAULT CURRENT_TIMESTAMP:
-- 값을 따로 안 넣으면 현재 시간이 자동 저장됨
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- users 테이블의 구조를 간단히 확인
-- Field, Type, Null, Key, Default, Extra 등을 보여줌
DESC users;
-- 같은 의미로 컬럼 구조를 확인하는 명령어
SHOW COLUMNS FROM users;
-- 테이블 생성문 자체를 다시 보고 싶을 때 사용
-- 어떤 컬럼, 어떤 옵션으로 만들었는지 그대로 확인 가능
SHOW CREATE TABLE users;
-- users 테이블 자체를 삭제
-- 구조 + 데이터 모두 삭제됨
DROP TABLE users;
-- users 테이블의 데이터만 전부 비움
-- 테이블 구조는 남겨둠
TRUNCATE TABLE users;
############################################################
# 3. INSERT - 데이터 넣기
############################################################
-- users 테이블의 name, email, age 컬럼에 값을 넣음
-- id는 AUTO_INCREMENT 이므로 자동 생성됨
-- created_at도 DEFAULT CURRENT_TIMESTAMP 이므로 자동 입력됨
INSERT INTO users (name, email, age)
VALUES ('Kim', '[email protected]', 20);
-- 여러 행을 한 번에 삽입
-- VALUES 뒤에 괄호를 여러 개 쓰면 됨
INSERT INTO users (name, email, age)
VALUES
('Lee', '[email protected]', 21),
('Park', '[email protected]', 22),
('Choi', '[email protected]', 23);
-- 일부 컬럼만 넣기
-- age를 안 넣으면 NULL로 들어갈 수 있음
INSERT INTO users (name, email)
VALUES ('Hong', '[email protected]');
-- 현재 날짜/시간을 직접 넣고 싶으면 NOW() 함수 사용 가능
INSERT INTO users (name, email, age, created_at)
VALUES ('Song', '[email protected]', 25, NOW());
############################################################
# 4. SELECT - 데이터 조회
############################################################
-- users 테이블의 모든 컬럼(*)과 모든 행을 조회
SELECT * FROM users;
-- users 테이블에서 id, name 컬럼만 조회
-- 필요한 컬럼만 가져오는 게 보통 더 좋음
SELECT id, name FROM users;
-- id가 1인 행만 조회
-- WHERE 는 조건 필터 역할
SELECT * FROM users
WHERE id = 1;
-- age가 20 이상인 사용자 조회
-- >= 는 크거나 같다
SELECT * FROM users
WHERE age >= 20;
-- age가 20 이상이고 25 이하인 사용자 조회
-- AND 는 두 조건을 모두 만족해야 함
SELECT * FROM users
WHERE age >= 20 AND age <= 25;
-- age가 20이거나 name이 Kim인 사용자 조회
-- OR 는 둘 중 하나만 만족해도 됨
SELECT * FROM users
WHERE age = 20 OR name = 'Kim';
-- name이 Kim이 아닌 사용자 조회
-- != 는 같지 않다
SELECT * FROM users
WHERE name != 'Kim';
-- email 값이 비어있는(NULL) 행 조회
-- NULL 비교는 = NULL 이 아니라 IS NULL 을 써야 함
SELECT * FROM users
WHERE age IS NULL;
-- age 값이 NULL이 아닌 행 조회
SELECT * FROM users
WHERE age IS NOT NULL;
-- 이름에 kim 이 포함된 사용자 조회
-- LIKE 는 패턴 검색
-- % 는 앞뒤 어떤 문자열이 와도 허용
SELECT * FROM users
WHERE name LIKE '%kim%';
-- 이름이 K로 시작하는 사용자 조회
SELECT * FROM users
WHERE name LIKE 'K%';
-- 이름이 m으로 끝나는 사용자 조회
SELECT * FROM users
WHERE name LIKE '%m';
-- age가 20, 22, 25 중 하나인 사용자 조회
-- 여러 OR를 줄여서 쓸 수 있음
SELECT * FROM users
WHERE age IN (20, 22, 25);
-- age가 20~25 범위 안인 사용자 조회
SELECT * FROM users
WHERE age BETWEEN 20 AND 25;
-- created_at 기준으로 최신순 정렬
-- DESC = 내림차순
SELECT * FROM users
ORDER BY created_at DESC;
-- age 기준 오름차순 정렬
-- ASC = 오름차순, 기본값이라 생략 가능
SELECT * FROM users
ORDER BY age ASC;
-- 5개만 조회
-- LIMIT 는 가져올 행 수 제한
SELECT * FROM users
LIMIT 5;
-- 0번째부터 5개 조회
SELECT * FROM users
LIMIT 0, 5;
-- 5번째 다음부터 5개 조회
-- 페이징할 때 자주 씀
SELECT * FROM users
LIMIT 5, 5;
-- 전체 행 개수 조회
-- COUNT(*) 는 행 수를 셈
SELECT COUNT(*) FROM users;
-- age 값이 있는 행만 개수 조회
-- COUNT(age)는 age가 NULL이 아닌 행만 셈
SELECT COUNT(age) FROM users;
-- age 평균값 조회
SELECT AVG(age) FROM users;
-- age 최솟값 조회
SELECT MIN(age) FROM users;
-- age 최댓값 조회
SELECT MAX(age) FROM users;
-- age 총합 조회
SELECT SUM(age) FROM users;
-- 중복 제거한 name만 조회
SELECT DISTINCT name FROM users;
############################################################
# 5. UPDATE - 데이터 수정
############################################################
-- id가 1인 사용자의 이름을 수정
-- WHERE가 없으면 전체 행이 바뀌므로 매우 주의
UPDATE users
SET name = 'Kim Minsu'
WHERE id = 1;
-- 여러 컬럼을 한 번에 수정
UPDATE users
SET name = 'Lee Minsu',
email = '[email protected]',
age = 30
WHERE id = 2;
-- 조건에 맞는 모든 행의 age를 1 증가
-- age = age + 1 은 기존 값에 1을 더한다는 뜻
UPDATE users
SET age = age + 1
WHERE age IS NOT NULL;
-- 이름에 kim이 들어가는 사용자의 email 도메인 변경 예시
UPDATE users
SET email = '[email protected]'
WHERE name LIKE '%kim%';
############################################################
# 6. DELETE - 데이터 삭제
############################################################
-- id가 1인 행만 삭제
DELETE FROM users
WHERE id = 1;
-- age가 NULL인 행 삭제
DELETE FROM users
WHERE age IS NULL;
-- 조건 없이 전체 행 삭제
-- 테이블 구조는 남고 데이터만 사라짐
DELETE FROM users;
############################################################
# 7. ALTER TABLE - 테이블 구조 변경
############################################################
-- users 테이블에 phone 컬럼 추가
-- VARCHAR(20): 전화번호 같은 짧은 문자열 저장
ALTER TABLE users
ADD COLUMN phone VARCHAR(20);
-- 컬럼 위치까지 지정 가능
-- email 컬럼 뒤에 address 컬럼 추가
ALTER TABLE users
ADD COLUMN address VARCHAR(255) AFTER email;
-- age 컬럼 타입을 BIGINT로 변경
-- MODIFY COLUMN 은 컬럼 속성을 변경할 때 사용
ALTER TABLE users
MODIFY COLUMN age BIGINT;
-- phone 컬럼 이름을 mobile 로 바꾸고 타입도 지정
-- CHANGE COLUMN 은 기존 컬럼명 + 새 컬럼명 둘 다 적어야 함
ALTER TABLE users
CHANGE COLUMN phone mobile VARCHAR(20);
-- mobile 컬럼 삭제
ALTER TABLE users
DROP COLUMN mobile;
-- 테이블 이름 변경
RENAME TABLE users TO members;
############################################################
# 8. INDEX - 인덱스
############################################################
-- name 컬럼에 인덱스를 생성
-- 검색 속도 향상 가능
-- 대신 INSERT/UPDATE/DELETE 시 약간의 부담이 늘어날 수 있음
CREATE INDEX idx_users_name ON users(name);
-- email 컬럼에 유니크 인덱스 생성
-- 중복을 허용하지 않음
CREATE UNIQUE INDEX idx_users_email ON users(email);
-- 테이블에 걸린 인덱스 목록 조회
SHOW INDEX FROM users;
-- 인덱스 삭제
DROP INDEX idx_users_name ON users;
############################################################
# 9. 사용자(User) / 권한(Privilege)
############################################################
-- MySQL 사용자 생성
-- 'appuser' : 사용자 이름
-- '@' : 사용자명과 접속 호스트를 구분
-- '%' : 어떤 호스트에서든 접속 가능
-- IDENTIFIED BY : 이 계정의 비밀번호를 설정
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';
-- localhost 에서만 접속 가능한 사용자 생성
-- 즉 같은 서버 내부에서만 허용
CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'LocalPass123!';
-- 특정 IP 에서만 접속 가능한 사용자 생성
CREATE USER 'ipuser'@'192.168.0.10' IDENTIFIED BY 'IpPass123!';
-- appdb 데이터베이스의 모든 테이블에 대해 모든 권한 부여
-- appdb.* 에서:
-- appdb = 데이터베이스명
-- * = 그 DB 안의 모든 테이블
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
-- 조회만 가능하게 권한 부여
GRANT SELECT ON appdb.* TO 'readonly'@'%' IDENTIFIED BY 'ReadOnly123!';
-- 조회/삽입/수정/삭제 권한만 부여
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'worker'@'%';
-- 특정 테이블만 조회 권한 부여
GRANT SELECT ON appdb.users TO 'viewer'@'%';
-- 권한 회수
REVOKE INSERT, UPDATE, DELETE ON appdb.* FROM 'worker'@'%';
-- 현재 사용자의 권한 확인
SHOW GRANTS FOR 'appuser'@'%';
-- 비밀번호 변경
ALTER USER 'appuser'@'%' IDENTIFIED BY 'NewPass123!';
-- 사용자 삭제
DROP USER 'appuser'@'%';
-- 권한 변경 사항 반영
-- 최신 버전에서는 꼭 필요하지 않은 경우도 있지만 시험에선 자주 같이 적음
FLUSH PRIVILEGES;
############################################################
# 10. 트랜잭션(Transaction)
############################################################
-- 트랜잭션 시작
-- 지금부터 여러 작업을 하나의 묶음으로 처리
START TRANSACTION;
-- 예시 작업 1
UPDATE users
SET age = age + 1
WHERE id = 1;
-- 예시 작업 2
UPDATE users
SET age = age - 1
WHERE id = 2;
-- 지금까지 작업을 확정
COMMIT;
-- 또는 문제가 생기면 전부 취소
ROLLBACK;
############################################################
# 11. JOIN - 여러 테이블 함께 조회
############################################################
-- orders 테이블 예시
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
product_name VARCHAR(100),
amount INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- users 와 orders 를 연결해서 조회
-- u, o 는 별칭(alias)
-- users.id 와 orders.user_id 가 같은 것끼리 연결
SELECT u.id, u.name, o.order_id, o.product_name, o.amount
FROM users u
JOIN orders o
ON u.id = o.user_id;
-- LEFT JOIN
-- users 는 모두 보여주고, 주문이 없는 사람도 포함
SELECT u.id, u.name, o.product_name
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id;
############################################################
# 12. GROUP BY / HAVING - 그룹 집계
############################################################
-- age 별 사용자 수 조회
-- 같은 age끼리 묶어서 개수 계산
SELECT age, COUNT(*) AS cnt
FROM users
GROUP BY age;
-- 주문 테이블에서 사용자별 주문 수 조회
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id;
-- 사용자별 총 주문 금액 조회
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id;
-- 그룹 결과에 조건 걸기
-- HAVING 은 GROUP BY 이후 집계 결과에 조건을 거는 것
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id
HAVING SUM(amount) >= 10000;
############################################################
# 13. 서브쿼리(Subquery)
############################################################
-- 평균 나이보다 많은 사용자 조회
-- 괄호 안 SELECT가 먼저 실행되어 평균값을 구함
SELECT *
FROM users
WHERE age > (
SELECT AVG(age)
FROM users
);
-- 주문이 한 번이라도 있는 사용자 조회
SELECT *
FROM users
WHERE id IN (
SELECT user_id
FROM orders
);
############################################################
# 14. 문자열 / 날짜 / 숫자 함수
############################################################
-- 문자열 길이
SELECT name, LENGTH(name) FROM users;
-- 문자열 이어붙이기
SELECT CONCAT(name, ' / ', email) AS user_info FROM users;
-- 대문자 변환
SELECT UPPER(name) FROM users;
-- 소문자 변환
SELECT LOWER(name) FROM users;
-- 앞뒤 공백 제거
SELECT TRIM(name) FROM users;
-- 현재 날짜와 시간
SELECT NOW();
-- 현재 날짜만
SELECT CURDATE();
-- 현재 시간만
SELECT CURTIME();
-- created_at 에서 연도만 추출
SELECT YEAR(created_at) FROM users;
-- 오늘 이후 7일 날짜 계산
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
-- 숫자 반올림
SELECT ROUND(123.456, 2);
############################################################
# 15. 조건문 / NULL 처리
############################################################
-- IF 함수
-- age가 20 이상이면 adult, 아니면 teen 표시
SELECT name,
IF(age >= 20, 'adult', 'teen') AS age_group
FROM users;
-- IFNULL
-- age가 NULL이면 0으로 표시
SELECT name,
IFNULL(age, 0) AS safe_age
FROM users;
-- CASE 문
SELECT name,
CASE
WHEN age >= 30 THEN '30대 이상'
WHEN age >= 20 THEN '20대'
ELSE '미성년/기타'
END AS category
FROM users;
############################################################
# 16. 테이블/컬럼 정보 조회
############################################################
-- appdb 안의 모든 테이블 목록 조회
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'appdb';
-- appdb 안의 테이블별 컬럼 정보 조회
SELECT table_name, column_name, data_type, is_nullable, column_key
FROM information_schema.columns
WHERE table_schema = 'appdb';
-- 각 테이블 크기 조회(MB)
SELECT
table_name,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'appdb';
############################################################
# 17. 상태 조회 / 운영용
############################################################
-- 현재 로그인 계정 확인
SELECT USER();
-- 현재 DB 확인
SELECT DATABASE();
-- MySQL 버전 확인
SELECT VERSION();
-- 현재 연결 수 확인
SHOW STATUS LIKE 'Threads_connected';
-- 실행 중인 세션/쿼리 확인
SHOW PROCESSLIST;
-- InnoDB 내부 상태 확인
SHOW ENGINE INNODB STATUS;
-- 서버 변수 확인
SHOW VARIABLES;
-- 문자셋 관련 변수만 조회
SHOW VARIABLES LIKE 'character_set%';
-- 현재 상태값 일부 조회
SHOW STATUS LIKE 'Connections';
############################################################
# 18. 잠금/세션 관리 관련
############################################################
-- 현재 실행 중인 프로세스(세션) 목록 조회
SHOW PROCESSLIST;
-- 특정 프로세스 ID를 강제 종료
-- 예: 15번 세션 종료
KILL 15;
############################################################
# 19. 테이블 유지보수
############################################################
-- 테이블 상태 확인
SHOW TABLE STATUS LIKE 'users';
-- 테이블 최적화
OPTIMIZE TABLE users;
-- 테이블 검사
CHECK TABLE users;
-- 테이블 분석
ANALYZE TABLE users;
-- 테이블 복구 시도 (일부 엔진/상황에서 사용)
REPAIR TABLE users;
CREATE DATABASE IF NOT EXISTS appdb;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE test1 (
id INT AUTO_INCREMENT PRIMARY KEY,
status VARCHAR(20) DEFAULT 'active'
);
INSERT INTO users (id, name, email)
VALUES (1, 'Kim', '[email protected]')
ON DUPLICATE KEY UPDATE
name = 'Kim Updated',
email = '[email protected]';