본문 바로가기

DataBase(SQL)/DAY 27 _ 23.09.25

DDL

-- DDL(데이터 정의어) : Create, Drop, Alter

--> 스키마를 정의한다.
--> 데이터베이스 관리자 또는 데이터베이스 설계자의 역할에 해당!
--> DDL 명령문은 데이터베이스 객체를 생성, 수정, 삭제하거나 데이터베이스의 구조를 정의하는 데 사용됨

1. CREATE: 데이터베이스 객체를 생성하는 데 사용됩니다.
예를 들어, 테이블, 뷰, 시퀀스, 인덱스 등을 생성할 때 CREATE 문을 사용합니다.

2. ALTER: 데이터베이스 객체를 수정하는 데 사용됩니다.
테이블에 새 열을 추가하거나 기존 열의 데이터 유형을 변경하는 등의 작업을 수행할 수 있습니다.

3. DROP: 데이터베이스 객체를 삭제하는 데 사용됩니다.
예를 들어, 테이블을 삭제하거나 인덱스를 삭제할 때 DROP 문을 사용합니다.

4. TRUNCATE: 테이블의 모든 데이터를 삭제하지만 테이블 구조는 유지하는 데 사용됩니다.

5. COMMENT: 데이터베이스 객체에 주석(설명)을 추가하는 데 사용됩니다. 
주석은 문서화 및 설명 목적으로 유용합니다.

6. RENAME: 데이터베이스 객체의 이름을 변경하는 데 사용됩니다. 

 


----- ** 무결성 제약 조건 ** -----

INSERT INTO STUDENT values(1, '한조', 30, 90, sysdate);
--> 만약 이 코드를 100번 반복한다면 primary key 100개가 같아지겠지..?

INSERT INTO STUDENT values(null, '한조', 30, 90, sysdate);
--> 데이터에 null값이 너무 쉽게 들어가게돼.

1. 기본 키 제약조건 (Primary Key Constraint):
각 행을 고유하게 식별하는 열(또는 열의 집합)에 대한 제약조건입니다.
중복된 값을 가질 수 없으며, NULL 값을 가질 수 없습니다.
테이블에서 기본 키로 선택된 열은 해당 테이블의 다른 제약조건에서 외래 키로 사용될 수 있습니다.

2. 고유한 제약조건 (Unique Constraint):
열(또는 열의 집합)에 대해 고유한 값을 갖도록 하는 제약조건입니다.
중복된 값을 허용하지 않으나, NULL 값을 가질 수 있습니다.

3. 외래 키 제약조건 (Foreign Key Constraint):
한 테이블의 열이 다른 테이블의 기본 키를 참조하는 제약조건입니다.
외래 키 값은 해당 기본 키 값을 참조해야 합니다.
참조 무결성을 유지하기 위해 사용됩니다.

4. 체크 제약조건 (Check Constraint):
열의 값이 특정 조건을 충족해야 함을 지정하는 제약조건입니다.
예를 들어, 나이 열의 값은 0보다 크고 120보다 작아야 한다는 조건을 설정할 수 있습니다.

5. NULL 제약조건 (NOT NULL Constraint):
특정 열이 NULL 값을 가질 수 없도록 하는 제약조건입니다.
열의 값은 항상 존재해야 합니다.

6. 기본값 제약조건 (Default Constraint):
특정 열의 값을 지정하지 않을 경우 사용할 기본값을 설정하는 제약조건입니다.
+++ 도메인 제약(Domain Constraint):
데이터베이스에서 특정 열(속성)에 저장되는 데이터의 형식, 범위, 길이, 유효성 검사 등을 정의하는 제약조건

 


SELECT * FROM STUDENT;

DROP TABLE STUDENT;
CREATE TABLE STUDENT(
	id NUMBER PRIMARY key, --> 1. 기본키 제약 : 중복허용 X, primarykey의 NULL 허용 X ★★★
	name varchar2(50) NOT NULL, --> 2. NULL 제약 : 필수작성해야하는 대부분의 필드가 필요하겠지
	age NUMBER NOT NULL,
	score NUMBER default 100 NOT NULL,
	gender varchar2(1) check(gender IN ('M', 'F', 7)),
	phone varchar2(30) UNIQUE, --> 3. UNIQUE 제약 : 값의 중복 허용X -> 단, null은 허용됨!
	register DATE default sysdate NOT NULL
);

INSERT INTO STUDENT values(student_seq.nextval, '한조', 30, 90, 'M', '010-1234-1234', sysdate);

 

--2. NULL제약

INSERT INTO STUDENT values(student_seq.nextval, null, 30, 90, 'M', '010-1234-1234', sysdate);
--> 이제 이름, 나이... 에는 null이 못들어간다구.
INSERT INTO STUDENT values(student_seq.nextval, 'null제약조건', 30, 90, NULL, '010-1234-1234', sysdate);

 

--3. Unique제약

INSERT INTO STUDENT values(student_seq.nextval, 'unique제약', 30, 90, 'M', '010-123-123', sysdate);
INSERT INTO STUDENT values(student_seq.nextval, 'null의 중복은 허용', 30, 90, 'M', null, sysdate);

 

--4. Domain제약(= check제약) : gender에 M, F만 넣도록 하고 싶을 때

INSERT INTO STUDENT values(student_seq.nextval, '트레', 30, 90, 'T', null, sysdate);
--> M, F만 들어갈 수 있다궁
INSERT INTO STUDENT values(student_seq.nextval, '트레', 30, 90, 'F', null, sysdate);
INSERT INTO STUDENT values(student_seq.nextval, '트레', 30, 90, 7, null, sysdate);
--> gender인데 숫자가 들어가는것도 이상하지?

 

--5. 외래키제약

DROP SEQUENCE BOARD_seq;
CREATE SEQUENCE BOARD_seq;

DROP TABLE BOARD;
CREATE TABLE BOARD(
	id NUMBER PRIMARY KEY,
	STUDENT_id NUMBER REFERENCES student(id) ON DELETE CASCADE , --> 외래키 가져온거!
	-- ON DELETE CASCADE : 외래 키(Foreign Key) 관계에서 사용되는 옵션 중 하나로,
	-- 부모 테이블의 특정 레코드가 삭제될 때 해당 레코드와 관련된 자식 테이블의 레코드도
        -- 자동으로 삭제되도록 하는 옵션
	title varchar2(500),
	text varchar2(4000),
	register_date DATE
);

INSERT INTO board values(
	board_seq.nextval,
	35,
	'외래키 가져오는 방법',
	'REFERENCES student(id), --> 외래키 가져온거! 이렇게.',
	sysdate
);

SELECT * FROM board;
SELECT * FROM STUDENT;

** 외래키 부가옵션
1. ON DELETE CASCADE: ★★★
부모 테이블에서 행이 삭제될 때 자식 테이블에서도 관련 행이 자동으로 삭제됩니다.

2. ON UPDATE SET NULL: ★★★
부모 테이블의 기본 키가 변경될 때 자식 테이블의 외래 키 열을 NULL로 설정합니다.

3. ON UPDATE SET DEFAULT: ★★★
부모 테이블의 기본 키가 변경될 때 자식 테이블의 외래 키 열을 기본값으로 설정합니다.

4. ON DELETE SET NULL: 
부모 테이블에서 행이 삭제될 때 자식 테이블의 외래 키 열을 NULL로 설정합니다. 

이 옵션을 사용하면 자식 테이블의 행은 삭제되지 않지만 외래 키가 무효화됩니다.

5. ON DELETE SET DEFAULT: 
부모 테이블에서 행이 삭제될 때 자식 테이블의 외래 키 열을 기본값으로 설정합니다. 

이 옵션은 일반적으로 사용되지는 않습니다.

6. ON DELETE NO ACTION / RESTRICT: 
부모 테이블에서 행이 삭제되지 않도록 제약을 두는 옵션입니다. 이 옵션을 사용하면 삭제 연산이 거부됩니다.

7. ON UPDATE CASCADE: 
부모 테이블의 기본 키가 변경될 때 자식 테이블에서도 관련 행이 자동으로 업데이트됩니다.

8. ON UPDATE NO ACTION / RESTRICT: 
부모 테이블의 기본 키가 업데이트되지 않도록 제약을 두는 옵션입니다. 

-----------------------------------------

 

-- 6. default세팅확인

INSERT INTO STUDENT(id, name, age, gender) values(student_seq.nextval, '하이', 30, 'F');

SELECT * FROM  STUDENT;

'DataBase(SQL) > DAY 27 _ 23.09.25' 카테고리의 다른 글

View  (0) 2023.09.25
DML  (0) 2023.09.25