programming/database

[Oracle] 테이블과 제약조건


7. 테이블과 제약조건


7.1 테이블


7.1.1 테이블 생성


-- number 최대 38자리, number(전체자리수, 소수이하자리수)

CREATE TABLE T_Emp (

id                NUMBER(5) NOT NULL,

name           VARCHAR2(25),

salary           NUMBER(7, 2),

phone          VARCHAR2(15),

dept_name    VARCHAR2(25)

);


7.1.2 테이블명 수정하기: rename ~ to ~


RENAME T_Emp TO S_Emp;


7.1.3 테이블에 데이터 입력


INSERT INTO S_Emp VALUES (100, '이상헌', 2000, '010-2222-3333', '개발부');

INSERT INTO S_Emp VALUES (101, '최순철', 3000, '010-3333-4444', '총무부');

INSERT INTO S_Emp VALUES (102, '장혜숙', 4000, '010-4444-5555', '영업부');


7.1.4 테이블에 컬럼 추가 : hire_date, date형


ALTER TABLE S_Emp ADD (hire_date DATE);


7.1.5 컬럼 수정 : phone의 varchar2(15) → varchar2(20)


ALTER TABLE S_Emp MODIFY ( phone VARCHAR2(20) );


7.1.6 컬럼의 이름 수정


ALTER TABLE S_Emp RENAME COLUMN id TO t_id;


7.1.7 컬럼의 삭제 : dept_name 삭제


ALTER TABLE S_Emp DROP COLUMN dept_name;


7.1.8 테이블의 데이터 조작 : insert, update, delete


7.1.8.1 기존의 row에 있는 hire_date에 값 입력하기


UPDATE S_Emp SET hire_date = SYSDATE WHERE t_id = 100;

UPDATE S_Emp SET hire_date = SYSDATE WHERE t_id = 200;

UPDATE S_Emp SET hire_date = SYSDATE WHERE t_id = 300;


7.1.8.2 새로운 데이터를 새로운 row에 입력하기


INSERT INTO S_Emp (t_id, hire_date) VALUES (400, SYSDATE);


7.1.8.3 테이블의 row 삭제하기 : delete


DELETE FROM S_Emp WHERE t_id = 200;


7.1.9 (문제) S_Emp 테이블에 대하여


7.1.9.1 e-mail을 관리하기 위한 mailid 컬럼을 10byte로 추가하시오.

7.1.9.2 mailid 컬럼을 20byte로 수정하시오.

7.1.9.3 mailid 컬럼명을 e_mail로 수정하시오.

7.1.9.4 s_emp 테이블명을 t_emp로 변경하시오.


7.2 제약조건(constraint)


7.2.1 정의

테이블의 해당 컬럼에 원치않는 데이터가 입력/변경/삭제되는 것을 방지하기 위해 테이블 생성 시 또는 변경시 설정하는 조건


7.2.2 종류

primary key, foreign key, unique, check, not null


7.2.3 제약조건을 반영한 테이블 생성하기


create table c_emp(

id number(5) constraint c_emp_id_pk primary key,

name varchar2(25) constraint c_emp_name_nn not null,

salary number(7, 2),

phone varchar2(15) constraint c_emp_phone_ck

check(phone like '3429-%'),

dept_id number(7) constraint c_emp_dept_id_fk

references dept(deptno)

);


7.2.4 제약조건 이름 검색하기


SELECT constraint_name FROM User_Constraints;


7.2.5 제약조건은 수정할 수 없고 삭제만 가능함


ALTER TABLE C_Emp DROP CONSTRAINT c_emp_name_nn;


7.2.6 제약조건 추가하기


ALTER TABLE C_Emp ADD CONSTRAINT c_emp_name_un UNIQUE(name);


-- not null 제약조건은 add로 할 수 없고 modify로 가능

ALTER TABLE C_Emp MODIFY (name VARCHAR2(25) CONSTRAINT c_emp_name_nn NOT NULL);


7.2.7 제약조건 활성화/비활성화


ALTER TABLE C_Emp DISABLE CONSTRAINT c_emp_name_nn;

ALTER TABLE C_Emp ENABLE CONSTRAINT c_emp_name_nn;

비활성화했던 것을 다시 활성화시킬 때 기존에 입력된 중복자료를 삭제해야 함


7.2.8 제약조건의 삭제


ALTER TABLE C_Emp DROP CONSTRAINT c_emp_name_nn;


7.2.9 제약조건 실습소스