일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- edwith
- CS기초지식
- Java Programming
- 예외처리
- ERD
- 모두를 위한 컴퓨터 과학(CS50)
- SSAFY 9기
- til
- 부스트코스
- SW
- Computer Science
- WebProgramming
- CS 기초지식
- 관계형 데이터베이스
- 기초프로그래밍
- 이진법
- exception
- java
- ssafy
- w3schools
- 면접을 위한 CS 전공지식 노트
- 삼성청년SW아카데미
- CS50
- 알고리즘
- 데이터베이스 모델링
- 모두를 위한 컴퓨터 과학
- 상속
- Compute Science
- 객체지향
- CS 기초
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -21일차 노트 필기_데이터베이스 Constraint(제약 조건), DML, DQL, DDL_220819 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -21일차 노트 필기_데이터베이스 Constraint(제약 조건), DML, DQL, DDL_220819
Joslynn 2022. 8. 21. 11:02Alter - create로 만들어진 것을 변경할 때,
update - domain을 수정할 때, 사용
Delete - 레코드를 삭제
Drop - create로 만든 object들을 물리적으로 완전히 제거
CONSTRAINT 제약 조건 종류
2) Foreign Key
CREATE TABLE fk_member(
code number(2) NOT NULL ,
id VARCHAR2(20) NOT NULL
CONSTRAINT id_fk REFERENCES MEMBER(id) ,
etc VARCHAR2(10)
)
: 다른 테이블의 PK를 참조하는 것
: 테이블에 레코드를 추가할 때 참조되는 대상의 값 이외에는 등록 없도록 하는 것
- 참조 무결성 원칙
: NULL 허용, 중복 가능
: 하나의 테이블에 여러개의 컬럼들이 FK설정이 가능하다.
: 재귀적 관계 설계 가능 - 자기자신 테이블의 PK를 참조하는 것;
** 주의 사항
INSERT: 부모키가 먼저 INSERT ---> 자식키 INSERT
DELETE: 참조되는 자식이 먼저 DELETE ---> 부모 키를 DELETE
** 삭제할 때 연관관계를 찾아서 자식을 먼저 삭제하는 자체가 불편하기 때문에
FK를 설정할 때, ON DELETE CASCADE 옵션을 함꼐 설정하면 부모가 삭제될 때,
모든 참조되는 자식 레코드로 함께 삭제 된다.
Foreign Key 예시)
** 부서정보를 따로 table로 분리해서 참조하는 형식으로 사용
** null: ex) 신입사원 입사 시 아직 부서 배정 X
** 테이블과 테이블 간 수평적으로 관계를 맺음 (DBus)
** 부서 정보 테이블의 부서코드는 부모 코드가 됨
FK 재귀적 관계 설정 예시)
ex) 게시판 + 댓글
글번호 | 제목 | 작성자 | 내용 | 등록일 | 부모 글의 글번호 |
1 | aa | null | |||
2 | bb | null | |||
3 | cc | null | |||
4 | 2 | ||||
5 | 1 |
** 4, 5번 글은 부모글에 대한 댓글
** 부모 글의 글번호 컬럼은 자기 자신 테이블의 PK를 참조하고 있음;
** 계층적 관계 만들 수 있음;
**관계
식별 관계: 1대 1의 관계로 다른 테이블의 PK를 자식의 PK가 참조할 때 (PK, FK)
비 식별 관계: 1대 다의 관계로 다른 테이블의 PK를 자식테이블의 일반 속성이 참조할 때
3) UNIQUE KEY
- 중복 불가 // null을 허용함 (Not null 설정하면 pk와 동일)
- 후보키 중에 대표키가 될 수 없는 키를 UNIQUE로 설정한다
- 한 테이블에 여러 개의 컬럼에 UNIQUE 설정 가능
4) CHECK
: 조건을 설정하여 조건에 만족하지 않는 정보를 INSERT할 수 없도록 하는 것
** DEFAULT
: 기본값을 설정 (자주 사용되는 값을 미리 설정해놓고 자동으로 값이 들어갈 수 있도록 하는 것)
ex) 등록일(SYSDATE), 조회수(0부터 시작)
: DEFAULT를 설정할 때 CONSTRAINT 별칭은 사용하지 않는다.
: DEFAULT와 함께 NOT NULL 설정을 할 때는 반드시 DEFAULT를 먼저 작성한다.
DML(Data Manipulation Language) - INSERT, UPDATE, DELETE
레코드 삽입
insert into 테이블이름(컬럼명, 컬럼명,...) values(값, 값, ...)
insert into 테이블이름 values(값, 값, ...)
=>모든 컬럼에 모두 값을 넣을 때 사용
레코드 수정
update 테이블이름
set 컬럼명=변경값 , 컬럼명=변경값 , 컬럼명=변경값 , ..... -- 여러 셀의 값을 변경할 때 ,로 연결
[ where 조건식 ]
Ex) 직원 정보 수정
UPDATE COPY_EMP
SET COMM=100, JOB='STUDENT', HIREDATE=SYSDATE
WHERE SAL >= 1000 AND SAL <=2000;
레코드 삭제
1) ROLLBACK이 가능 (취소처리)
DELETE [FROM] 테이블 이름 -- 모든 레코드 삭제
[WHERE 조건식] -- 특정 레코드만 삭제
--예시
DELETE FROM MEMBER WHERE ID='JANG';
DELETE MEMBER WHERE REG_DATE IS NULL;
** ROLLBACK: DML 문장에 의해 변화를 갖는 데이터들 - 잘못된 쿼리를 실행했을 때 되돌릴 기회를 줌
2) ROLLBACK 불가
TRUNCATE TABLE 테이블 이름 -- 모든 레코드 절삭(삭제)
DDL - 테이블 수정(ALTER)
① 컬럼추가
alter table 테이블이름 add (컬럼명 자료형 [제약조건] , 컬럼명 자료형 [제약조건] , ....)
② 컬럼삭제
alter table 테이블이름 drop column 컬럼이름
③ datatype변경
alter table 테이블이름 modify 컬럼이름 변경자료형
④ 컬럼이름 변경
alter table 테이블이름 rename column 기존컬럼명 to 변경컬럼명
* 제약 조건 추가
alter table 테이블이름 add constraint 제약조건_별칭 제약조건_종류
* 제약 조건 삭제
alter table 테이블이름 drop constraint 제약조건_별칭
**DEFAULT는 삭제 불가! (제약 조건이 아님)
⑤ 테이블 삭제
drop table 테이블이름
**테이블 복사 방법
CREATE TABLE 테이블 이름 AS 복사할 테이블 정보;
: 단, 테이블을 복사하면 제약 조건은 복사가 되지 않는다.
: 제약 조건도 복사하고 싶다면, 테이블을 복사한 후 변도로 제약 조건을 추가해야 함
-- 1) 모든 컬럼과 모든 레코드 복사
CREATE TABLE COPY_EMP AS SELECT * FROM EMP;
SELECT * FROM COPY_EMP;
-- 2) 특정한 컬럼과 조건에 해당하는 레코드만 복사 -- SELECT(COLUMN), WHERE(레코드)
CREATE TABLE COPY_EMP2 AS SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL >=3000;
SELECT * FROM COPY_EMP2;
-- 3) 테이블의 구조만 복사 -- WHERE 뒤의 조건식을 항상 FALSE로 만들어서 레코드를 불러오지 않도록 함
CREATE TABLE COPY_EMP3 AS SELECT * FROM EMP WHERE 1=0;
SELECT * FROM COPY_EMP3;
DQL (Data Query Language) - SELECT
select 문장
select distinct | * | 컬럼명 as 별칭, 컬럼명 별칭,.... -- 열 제한 = projection
from 테이블이름
[where 조건식 ] -- 행 제한 = selection
[order by 컬럼명 desc | asc , .. ] -- 정렬 대상 desc: 올림차순(기본), asc: 내림차순
*distinct는 중복 레코드 제거할 떄
*As는 별칭을 줄 때 사용( 생략 가능)
* 중요!! - 실행순서
from → where →select → order by 순으로 실행
예제) 사원 검색 및 정렬
--SCOTT 계정의 EMP를 SELECT해본다
--1) 원하는 컬럼만 검색
SELECT EMPNO, JOB, ENAME FROM EMP;
--2) 컬럼에 별칭 주기
SELECT EMPNO AS "사원 번호", JOB AS 직업, ENAME AS 이름
FROM EMP; -- 컬럼에 직접적인 변화는 주는 것은 아님
--3) 중복행 제거
-- EX) 우리 사원들의 JOB의 종류를 알고 싶다!
SELECT DISTINCT JOB FROM EMP;
-- EX) 우리 사원들이 소속되어 있는 부서번호를 알고 싶다!
SELECT DISTINCT DEPTNO FROM EMP;
-- 4) 정렬
--1) SAL을 기준으로 내림차순 정렬한다.
SELECT * FROM EMP ORDER BY SAL /*ASC*/; -- 올림차순
SELECT * FROM EMP ORDER BY SAL DESC; -- 내림차순
--2) JOB을 기준으로 올림차순으로 정렬하되 JOB이 같으면 SAL 높은 순서대로 정렬
SELECT * FROM EMP ORDER BY JOB, SAL DESC; -- ,(콤마)로 연결
WHERE 조건식: 다양한 함수와 연산자를 함께 사용
** 모든 연산자에 NOT을 붙히면 반대!!