gwooden_코린이
오라클 데이터 베이스 제약조건 본문
728x90
1. 데이터 제약 조건
- 데이터에 제약조건을 걸어서 옳지않은 데이터가 입력되는걸 방지
- 데이터의 무결성을 유지하기 위함
- 무결성이란?
데이터의 정확성, 일관성을 보장
- 영역 무결성 :
- 컬럼에 저장되는 데이터가 적정 데이터인지 확인 NULL, 조건범위에 해당하는 값 만족하는 데이터
- 참조 무결성 :
- 기본키를 참조하는 외래키에는 기본키에 해당하는 데이터만 저장
- 개체 무결성 :
- 데이터를 유일하게 식별해주는 기본키는 반드시 값이 있어야 하고, NULL 안되고, 중복도 불가능
- NOT NULL(NULL 안됨)
INSERT 말고도 제약 조건을 걸 수 있다.
테이블 생성
CREATE TABLE 테이블명 (
컬럼명 데이터형식 NOT NULL --오라클이 알아서 제약조건이름 설정
컬럼명 데이터형식 CONSTRAINT 제약조건명 NOT NULL
);
제약조건 삭제
데이터가 있던 말 던 그냥 됨
ALTER TABLE 테이블 이름
DROP CONSTRAINT 제약조건명
이미 생성된 테이블에 제약조건을 추가
데이터가 없으면 괜찮음
데이터가 있을 경우에는 제약조건을 위배되는 데이터가 있으면 안됨)
ALTER TABLE 테이블명
MODIFY 컬럼명 NOT NULL; --제약조건이름은 오라클이 알아서 해줌
CREATE TABLE NULL_TEST (
ID VARCHAR(20) NOT NULL,
PW VARCHAR(20) NOT NULL,
NAME VARCHAR(20)
);
INSERT INTO NULL_TEST
VALUES('AAAA', '1234', '고길동');
--테이블 생성에서 NULL은 안된다고 제약을 걸어서 오류 발생
INSERT INTO NULL_TEST
VALUES(NULL, 'ABCD', '홍홍홍');
--테이블 생성시 NAME 컬럼(세번째 컬럼)은 따로 제약조건을 걸지 않아 NULL 값이 입력된다.
INSERT INTO NULL_TEST
VALUES('BBBB', '1234', 'NULL');
1-1. NOT NULL
CREATE TABLE 테이블 (
ID VARCHAR(50) CONSTRAINT 제약조건 이름 NOT NULL
);
DROP TABLE NULL_TEST;
CREATE TABLE NULL_TEST(
ID VARCHAR(50) NOT NULL, -- 제약조건 이름은 오라클이 자동으로 설정
PW VARCHAR(50) CONSTRAINT PW_NULL NOT NULL, -- 제약조건 이름은 PW_NULL
NAME VARCHAR(50) -- 제약조건 없음
);
-- 제약조건에 위배되는 데이터가 없으므로 잘 실행 됨
INSERT INTO NULL_TEST
VALUES('AAA', '1234', NULL );
-- ID에 설정된 제약조건에 위배되므로 실행이 안됨
INSERT INTO NULL_TEST
VALUES(NULL, '1234', '홍길동');
-- PW에 설정된 제약조건에 위배되므로 실행이 안됨
INSERT INTO NULL_TEST
VALUES('BBB', '', '홍길동');
-- 이미 생성된 테이블안에 제약조건 추가
-- 이미 입력된 데이터 중 NAME에 NULL이 존재하므로 제약조건 추가 불가능
ALTER TABLE NULL_TEST
MODIFY NAME NOT NULL; -- 제약조건 이름은 오라클이 자동으로 설정
--참고사항
ALTER TABLE NULL_TEST
MODIFY NAME CONSTRAINT NAME_NULL NOT NULL; -- 제약조건이름은 NAME_NULL로 설정
-- 확인해보면 NAME에 NULL이 있어서 위에 코드가 실행 안됨
SELECT * FROM NULL_TEST;
-- NAME에 NOT NULL을 추가하기 위해선 기존 입력된 데이터 중 NULL인걸 삭제해야함
-- 그래서 NAME이 NULL인 데이터를 삭제함
DELETE FROM NULL_TEST WHERE NAME IS NULL;
-- 삭제 후 제약조건을 추가하면 잘 추가 됨
ALTER TABLE NULL_TEST
MODIFY NAME CONSTRAINT NAME_NULL NOT NULL; -- 제약조건 이름은 NAME_NULL임
-- 제약조건 잘 추가 된지 확인 (실행이 안되면 잘 추가 된거임)
INSERT INTO NULL_TEST
VALUES('AA', '11', NULL);
-- 현재 3개의 컬럼에 모두 NOT NULL 설정이 되어있으므로 추가는 무조건 다 입력해줘야함
INSERT INTO NULL_TEST
VALUES('AA', '11', '홍길동');
-- 위 INSERT 잘 추가된건지 확인
SELECT * FROM NULL_TEST;
-- 생각해보니 NAME에는 NOT NULL일 필요가 없을거 같음
-- 그래서 제약조건 삭제시킬거임
ALTER TABLE NULL_TEST
DROP CONSTRAINT NAME_NULL; -- 제약조건이름이 NAME_NULL인거 삭제
-- 위에서 NAME제약조건을 지웠으므로 이제 NULL이 추가됨
INSERT INTO NULL_TEST
VALUES('BB', '123', NULL);
-- NULL추가 된건지 최종확인
SELECT * FROM NULL_TEST;
1-2. UNIQUE
제약조건이름 설정하는 NOT NULL과 방식이 같음
-> CONSTRAINT 제약조건이름 설정할제약조
CREATE TABLE UNIQUE_TEST(
ID VARCHAR(20) UNIQUE, --중복 불가능
PW VARCHAR(20)
);
--단순 내용추가
INSERT INTO UNIQUE_TEST
VALUES('A', '1111');
--ID가 중복되는 데이터를 추가
INSERT INTO UNIQUE_TEST
VALUES('A', '2222'); --실행 안되는게 정상(이미 존재하는 ID라 중복에서 걸림)
--UNIQUE는 NULL 가능
INSERT INTO UNIQUE_TEST
VALUES(NULL, '3333');
--NULL추가된거 확인
SELECT * FROM UNIQUE_TEST;
--또 INSERT로 NULL을 추가하면??
INSERT INTO UNIQUE_TEST
VALUES(NULL, '4444');
--확인해보니 NULL이 한번 더 추가가 되었다. 그 이유로는 NULL은 값이 따로 없어서
--UNIQUE하고는 상관이 없다
SELECT * FROM UNIQUE_TEST;
--단순 데이터 추가(기존에 입력된 PW와 겹치는걸로 넣어서 테스트해보기)
INSERT INTO UNIQUE_TEST
VALUES('B', '1111');
--데이터 추가 확인
SELECT * FROM UNIQUE_TEST;
--A 1111
--NULL 3333
--NULL 4444
--B 1111
--PW 제약조건 (UNIQUE) 추가
--이미 입력된 데이터 중에 PW가 중복되는것이 존재해서 안됨
ALTER TABLE UNIQUE_TEST
MODIFY PW UNIQUE;
--중복되는 데이터를 지우기
DELETE FROM UNIQUE_TEST WHERE ID = 'B';
--지우고 데이터 지우고 다시 제약조건 추가해보기
--중복되는 데이터가 없어 정상 실행 됨
ALTER TABLE UNIQUE_TEST
MODIFY PW UNIQUE;
--제약 조건이 잘 걸렸는지 확인해보기
--기존 PW 입력된거랑 중복되는걸 추가시켜서 실행해 봄
--실행 안되면 제약조건이 잘 적용된것
INSERT INTO UNIQUE_TEST
VALUES('B', '1111');
--생각해보니 PW는 중복되고 괜찮은거 같음
--그래서 PW의 제약조건을 삭제
ALTER TABLE UNIQUE_TEST
DROP CONSTRAINT SYS_C007023; --제약조건 이름을 모르다 보니 테이블에서 직접 확인
--제약조건 삭제했으니 중복데이터 추가해보기
INSERT INTO UNIQUE_TEST
VALUES('B', '1111');
SELECT * FROM UNIQUE_TEST;
--A 1111
--NULL 3333
--NULL 4444
--B 1111
728x90
'데이터베이스' 카테고리의 다른 글
오라클 데이터 베이스 도서관DB 공부해보기 (0) | 2023.01.16 |
---|---|
오라클 데이터 베이스 제약조건02 (3) | 2023.01.16 |
오라클 데이터 베이스 데이터 정의어 (0) | 2023.01.13 |
오라클 데이터 베이스 SELECT, INSERT, UPDATE, DELETE 데이터 조작어 (0) | 2023.01.13 |
오라클 데이터 베이스 DELETE 삭제 (0) | 2023.01.13 |
Comments