SQL - DDL, DML
SQL: ‘Structured Query Language’ 의 약자로 RDBMS에서 사용되는 언어입니다. 수많은 정보를 Database에서 조작하고 관리하기 위해서는 SQL 언어를 사용해야합니다.
- 국제표준화기구에서 SQL에 대한 표준을 정해서 발표하고 있습니다. 하지만…
- DBMS를 만드는 회사가 여러 곳이기 때문에 DBMS 마다 표준 SQL을 준수하되, 각 제품의 특성을 반영하기 위한 약간의 차이가 존재합니다.
DDL : 'Data Definition Language' 의 약자로 테이블이나 관계의 구조를 생성하는데 사용합니다.
- CREATE : 새로운 데이터베이스 및 테이블을 생성해 줍니다.
CREATE TABLE IF NOT EXISTS STUDENT
(
student_code varchar(100) primary key comment '수강생코드',
name varchar(100) not null comment '이름',
birth varchar(8) null comment '생년월일',
gender varchar(1) not null comment '성별',
MAJOR_code varchar(100) not null comment '주특기코드',
score decimal(10,2) null comment '시험점수',
foreign key(MAJOR_code) references major(MAJOR_code)
);
- ALTER : 데이터베이스와 테이블의 내용을 수정할 수 있습니다.
ALTER TABLE EXAM ADD PRIMARY KEY(student_code, exam_seq);
ALTER TABLE EXAM ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code);
- DROP : 데이터베이스와 테이블을 삭제할 수 있습니다. 데이터 및 테이블 전체를 삭제합니다.
- TRUNCATE : 데이터베이스와 테이블을 삭제할 수 있습니다. 최초 테이블이 만들어졌던 상태 즉, 컬럼값만 남깁니다.
DML : 'Data Manipulation Language' 의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용합니다.
- INSERT : 테이블에 새로운 row를 추가할 수 있습니다.
INSERT INTO STUDENT VALUES('s1', '최원빈', '20220331', 'M', '01000000001', 'm1');
INSERT INTO STUDENT VALUES('s2', '강준규', '20220501', 'M', '01000000002', 'm2');
INSERT INTO STUDENT(student_code, name, gender, major_code) VALUES('s12', '권오빈', 'M', 'm3');
INSERT INTO STUDENT VALUES('s13', '김가은', '20220121', 'F', '30', 'm1');
INSERT INTO STUDENT(student_code, name, gender, major_code) VALUES('s14', '김동현', 'M', 'm4');
INSERT INTO STUDENT VALUES('s15', '박은진', '20221101', 'F', '40', 'm1');
INSERT INTO STUDENT(student_code, name, birth, gender, score, major_code) VALUES('s16', '정영호', '20221105', 'M', '50', 'm5');
INSERT INTO STUDENT(student_code, name, gender, major_code) VALUES('s17', '박가현', 'F', 'm7');
INSERT INTO STUDENT(student_code, name, birth, gender, score, major_code) VALUES('s18', '박용태', '20220508', 'M', '60', 'm6');
INSERT INTO STUDENT VALUES('s19', '김예지', '20220505', 'F', '70', 'm2');
INSERT INTO STUDENT VALUES('s20', '윤지용', '20220909', 'M', '80', 'm3');
INSERT INTO STUDENT VALUES('s21', '손윤주', '20220303', 'F', '90', 'm6');
student_code(PK) , name(not null) , birth(null) , gender (not null) , score (null) , major_code (not null)
- SELECT : 테이블의 row를 선택할 수 있습니다.
SELECT * FROM STUDENT;
SELECT * FROM STUDENT WHERE STUDENT_CODE = 's1';
SELECT name, major_code FROM STUDENT WHERE student_code = 's1';
- UPDATE : 테이블의 row의 내용을 수정할 수 있습니다.
INSERT INTO STUDENT VALUES('s0', '수강생', '20220331', 'M', '75', 'm8');
UPDATE STUDENT SET major_code= 'm2' where student_code= 's0';
- DELETE : 테이블의 row를 삭제할 수 있습니다.
DELETE FROM STUDENT WHERE student_code = 's0';
CONSTRAINT(제약 조건) :
- AUTO_INCREMENT : 컬럼의 값이 중복되지 않게 1씩 자동으로 증가하게 해줘 고유번호를 생성해 줍니다.
ALTER TABLE MANAGER MODIFY COLUMN id bigint AUTO_INCREMENT;
- NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
- UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
- PRIMARY KEY : 기본 키는 테이블 내에서 '유일하게 존재하는 값의 조합'을 설정해서 중복된 데이터가 테이블에 삽입되는 것을 방지하는 제약조건입니다. 해당 필드가 NOT NULL( NULL 값을 저장 불가)과 UNIQUE(중복된 값 저장 불가) 제약 조건의 특징을 모두 가지게 됩니다.
- FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만들며 데이터의 무결성을 보장해 줍니다. 외래 키는 두개의 테이블을 연결하는 다리 역할을 해주는 키입니다. `FK를 가지는 테이블`이 `참조하는 기준 테이블의 열`은 반드시 PK 혹은 UNIQUE 제약조건이 설정되어 있어야 합니다.
- CASCADE : 외래 키로 연관된 데이터를 삭제,변경할 수 있습니다.
# DROP CONSTRAINT exam_fk_student_code 의 의미 :
# CONSTRAINT exam_fk_student_code-foreign key(student_code) references student(student_code)-를 삭제하라.
# CONSTRAINT exam_fk_student_code: 외래 키를 다시 만들고
# ON DELETE CASCADE: 옵션 추가. 즉 삭제될 때 삭제됨.
ALTER TABLE EXAM DROP CONSTRAINT exam_fk_student_code;
ALTER TABLE EXAM ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
ALTER TABLE MANAGER DROP CONSTRAINT manager_fk_student_code;
ALTER TABLE MANAGER ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
# 위 과정은 아래 쿼리를 실행하기 위한 것.
DELETE FROM STUDENT WHERE student_code = 's1';
MySQL에서 **CONSTRAINT**는 테이블의 데이터 무결성을 보장하기 위해 다양한 제약 조건을 설정하는 데 사용됩니다.
CONSTRAINT + (별명) + (제약조건()) + (참조()) ....