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 제약조건 실습소스