gwooden_코린이
오라클 데이터 베이스 제약조건02 본문
728x90
1. 데이터 베이스 제약조건
- not null
- unique
1-1. 키본키 PRIMARY KEY
- 각레코드들을 구별해주는 필드
- 중복내용 입력 불가능
- NULL 불가능
CREATE TABLE PK_TEST(
ID VARCHAR(20) PRIMARY KEY,
PW VARCHAR(20)
);
DESC PK_TEST;
-- 레코드 추가
INSERT INTO PK_TEST
VALUES('A', '1234');
-- 레코드 추가 (ID가 기본키이므로 중복내용 입력 안됨 - 오류)
INSERT INTO PK_TEST
VALUES('A', 'ZXCV');
SELECT * FROM PK_TEST;
--레코드 추가 (ID가 기본키이므로 NULL 안됨 - 오류)
INSERT INTO PF_TEST
VALUES(NULL, '1234');
CREATE TABLE PR_TEST(
ID VARCHAR(20) CONSTRAINT ID_PK PRIMARY KEY,
PW VARCHAR(20)
);
ALTER TABLE PR_TEST
DROP CONSTRAINT ID_PK;
ALTER TABLE PR_TEST
MODIFY ID CONSTRAINT PK_ID PRIMARY KEY;
DROP TABLE PR_TEST;
1-2. 외래키 FOREIGN KEY
다른 테이블간 관계를 정의할 때 사용
기본키를 참조
참조하는 기본키의 데이터타입과 일
FK_TEST 테이블에 있는 ID를 참조하는 외래키
NAME
CREATE TABLE FK_TEST(
ID VARCHAR(20) CONSTRAINT FK_ID REFERENCES PK_TEST(ID),
NAME VARCHAR(20)
);
--참조하는 PK에 B라는 데이터가 없으므로
--INSERT 안됨
INSERT INTO FK_TEST
VALUES('B', '1234');
--참조하는 PK컬럼(ID)에 A가 있으므로 잘 추가됨
INSERT INTO FK_TEST
VALUES('A', '홍길동');
SELECT * FROM FK_TEST;
1-3. CHECK
직접 조건을 지정해서 조건에 만족하는 데이터만 입력
CREATE TABLE CHECK_TEST(
NAME VARCHAR(20),
AGE NUMBER CHECK(AGE>=1 AND AGE<=100),
GENDER VARCHAR(20) CONSTRAINT G_CHECK CHECK (GENDER IN('M', 'F'))
);
--AGE 제약조건에 위배도므로 105는 입력이 안됨 -오류
INSERT INTO CHECK_TEST
VALUES('AA', 105, 'M');
--제약조건에 알맞게 잘 입력했으니 정상작동
INSERT INTO CHECK_TEST
VALUES('AAA', 50, 'M');
--대소문자 구분함 -오류(오류를 없애려면 제약조건에 소문자도 같이 넣어주면 된다.)
INSERT INTO CHECK_TEST
VALUES('AAA', 20, 'f');
SELECT * FROM CHECK_TEST;
INSERT INTO CHECK_TEST
VALUES('B', 20, 'F');
--NAME은 3글자 이상만 입력되도록 제약조건을 추가
--CHECK에 맞지 않은 데이터가 존재하므로 지우고 제약조건을 걸어야됨
ALTER TABLE CHECK_TEST
MODIFY NAME CHECK(LENGTH(NAME)>=3);
--제약조건을 추가하기 위해 위배되는 데이터 삭제
DELETE FROM CHECK_TEST WHERE LENGTH(NAME)<3;
SELECT * FROM CHECK_TEST;
--위배되는 데이터를 지웠으니 정상실행
ALTER TABLE CHECK_TEST
MODIFY NAME CHECK(LENGTH(NAME)>=3);
--NAME이 2글자라서 추가 안됨 - 오류
INSERT INTO CHECK_TEST
VALUES('이름', 30, 'F');
--NAME이 3글자이상이라서 추가 잘 됨
INSERT INTO CHECK_TEST
VALUES('김유신', 30, 'F');
VARCHAR(20) -> BYTE 최대 20BYTE까지 입력 가능 한글 -> 3BYTE 나머지는 -> 1BYTE LENGTH로 처리 해야된다. |
1-4. DEFAULT : 기본값
데이터를 입력하지 않을 경우 자동으로 입력되는 값을 기본값이라고 함
CREATE TABLE DE_TEST(
이름 VARCHAR(50),
지역 VARCHAR(50) DEFAULT '서울'
--지역 VARCHAR(50) CONSTRAINT 제약조건이름 DEFAULT '서울'
);
SELECT * FROM DE_TEST;
--지역을 작성해서 추가하면 입력한 지역으로 추가
INSERT INTO DE_TEST
VALUES('고길동', '부산');
-- 지역을 NULL 추가해도 기본값이 아닌 NULL 추가
INSERT INTO DE_TEST
VALUES('둘리', 'NULL');
-- 지역부분을 추가하지 않고 이름만 추가하면 지역은 기본값으로 처리
INSERT INTO DE_TEST(이름)
VALUES('또치');
SELECT * FROM DE_TEST;
INSERT INTO DE_TEST(지역)
VALUES('인천');
INSERT INTO DE_TEST(지역)
VALUES('대구');
SELECT * FROM DE_TEST;
ALTER TABLE DE_TEST
ADD CONSTRAINT DE_이름 CHECK(LENGTH(이름)>=2);
ALTER TABLE DE_TEST
MODIFY 이름 DEFAULT '이름';
SELECT * FROM DE_TEST;
INSERT INTO DE_TEST(지역)
VALUES('울산');
SELECT * FROM DE_TEST;
NOT NULL : NULL 안됨
UNIQUE : 중복 불가능
PRIMARY KEY : 기본키
FOREIGN KEY REFERENCES 참조테이블(참조컬럼) : 외래키
CHECK : 조건에 만족하는 데이터만 입력
DEFAULT : 기본값
CONSTRAINT 제약조건명 제약조건
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명
ALTER TABLE 테이블명
MODIFY 컬럼명 제액조건
DEFAULT 제외 나머지 제약조건은 이미 입력도니 데이터가 제약조건에 위배되면 제약조건 추가 안됨 |
728x90
'데이터베이스' 카테고리의 다른 글
오라클 데이터 베이스 트랜잭션 (0) | 2023.01.16 |
---|---|
오라클 데이터 베이스 도서관DB 공부해보기 (0) | 2023.01.16 |
오라클 데이터 베이스 제약조건 (0) | 2023.01.13 |
오라클 데이터 베이스 데이터 정의어 (0) | 2023.01.13 |
오라클 데이터 베이스 SELECT, INSERT, UPDATE, DELETE 데이터 조작어 (0) | 2023.01.13 |
Comments