CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
필드이름1 필드타입1,
필드이름2 필드타입2,
...
);
ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;
TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLC} [WITH GRANT OPTION];
//ex
GRANT SELECT ,INSERT
ON mp
TO scott WITH GRANT OPTION;
REVOKE { 권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC}
[CASCADE CONSTRAINTS];
//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;
DELETE FROM 테이블이름; // 테이블 row 전체삭제
CREATE TABLE 테이블이름
(
필드이름 필드타입 PRIMARY KEY,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...
FOREIGN KEY(필드이름)
REFERENCES 테이블이름(필드이름)
);
// 단일 PK의 경우 -
CREATE TABLE STUDENT (
student_code VARCHAR(10) PRIMARY KEY -- 1개 컬럼
);
// 복합키의 경우
CREATE TABLE EXAM (
student_code VARCHAR(100),
exam_seq INT,
PRIMARY KEY (student_code, exam_seq) -- 2개 컬럼 조합
);
복합키는 왜 필요한가?
//문제 상황
// 학생 s1의 시험 결과가 3개
// -> student_code만으로 구분이 불가능
s1, 점수 85 <- 두 시험이 어떤 시험인지 구분 불가
s1, 점수 90 <- 두 시험이 어떤 시험인지 구분 불가
//해결
(학생이름, 시험주차)로 구분
(s1, 1) -> 첫번째 시험
(s2, 2) -> 두번째 시험
복합키의 조건
// CASCADE가 없는 경우
-- MAJOR 삭제 시도
DELETE FROM MAJOR WHERE major_code = 'm1';
-- ❌ 에러! STUDENT가 'm1' 참조 중
// CASCADE가 있는 경우
-- MAJOR 삭제 시
DELETE FROM MAJOR WHERE major_code = 'm1';
-- ✅ 성공! 해당 전공 학생들도 자동 삭제
// 사용 방법
// 1. ON DELETE CASCADE
CREATE TABLE STUDENT (
student_code VARCHAR(10) PRIMARY KEY,
name VARCHAR(50),
major_code VARCHAR(100),
CONSTRAINT fk_student_major
FOREIGN KEY (major_code)
REFERENCES MAJOR(major_code)
ON DELETE CASCADE -- 전공 삭제 시 학생도 삭제
);
// 2. ON UPDATE CASCADE
CREATE TABLE STUDENT (
student_code VARCHAR(10) PRIMARY KEY,
major_code VARCHAR(100),
CONSTRAINT fk_student_major
FOREIGN KEY (major_code)
REFERENCES MAJOR(major_code)
ON UPDATE CASCADE -- 전공코드 변경 시 학생도 변경
);
//3. 둘 다 사용
CREATE TABLE MANAGER (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
student_code VARCHAR(10),
CONSTRAINT manager_fk_student_code
FOREIGN KEY (student_code)
REFERENCES STUDENT(student_code)
ON DELETE CASCADE -- 학생 삭제 시 매니저도 삭제
ON UPDATE CASCADE -- 학생코드 변경 시 매니저도 변경
);
// SELECT
SELECT s.name, m.major_name
FROM STUDENT s
JOIN MAJOR m ON s.major_code = m.major_code;
//UPDATE
-- 스프링 전공 학생들의 전화번호 일괄 변경
UPDATE STUDENT s
JOIN MAJOR m ON s.major_code = m.major_code
SET s.phone = '01099999999'
WHERE m.major_name = '스프링';
//DELETE
-- 특정 전공 학생 삭제
DELETE s
FROM STUDENT s
JOIN MAJOR m ON s.major_code = m.major_code
WHERE m.major_name = '노드';
//INSERT (서브쿼리)
-- 직접 JOIN은 안 되지만 SELECT-JOIN 결과 삽입 가능
INSERT INTO STUDENT_BACKUP
SELECT s.*
FROM STUDENT s
JOIN MAJOR m ON s.major_code = m.major_code
WHERE m.major_name = '스프링';