/*
<DDL(DATA DEFINITION LANGUAGE)>
- 데이터 정의어
- 오라클에서 제공하는 객체를 생성, 변경, 삭제하고 데이터의 구조 자체를 정의하는 언어
- DB관리자, 설계자가 사용
->문서를 만들어주면 개발자가 쿼리를 작성하고 실행
- DLL구문은 ROLLBACK 불가능
<ALTER>
- 오라클에서 제공하는 객체를 수정하는 구문
<테이블 수정>
- ALTER TABLE 테이블이름 수정할내용;
* 수정할 내용
1) 컬럼추가/수정/삭제
2) 제약조건 추가/삭제 <- 수정은 불가능(삭제 후 다시 추가)
3) 테이블명/컬럼명/제약조건명 변경
*/
-- 테이블을 복사하여 실습용 테이블을 생성
-- 테이블을 복사하는데 조건문을 이요해서 원하는 데이터만 복사 할 수 있음
-- WHERE 조건을 주면 조건을 만족하는 데이터만 삽입
-- 원하는 컬럼만 선택하여 테이블 생성 가능
-- 컬럼에 별칭을 주게 되면 별칭으로 컬럼을 생성
DROP TABLE dept_copy;
CREATE TABLE DEPT_COPY
AS SELECT *
FROM DEPT;
-- 테이블 구조를 확인
DESC dept_copy;
/*
1)컬럼 추가/수정/삭제
- ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [DEFAULT 기본값];
*/
-- CNAME컬럼을 추가 VARCHAR2(20)
-- 기본값을 입력해주지 않으면 NULL값으로 채워진다.
ALTER TABLE dept_copy ADD cname VARCHAR2(20);
-- DNAME컬럼을 추가 VARCHAR2(20) DEFALUT '대한민국', 모든 행의 새로 추가되는 컬럼을 기본값으로 초기화
ALTER TABLE dept_copy ADD dname VARCHAR2(20) DEFAULT '대한민국';
/*
2)컬럼 수정(MODIFY)
데이터 타입 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 변경할 데이터 타입
기본값 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT 변경할값
*/
ALTER TABLE dept_copy MODIFY department_name VARCHAR2(30);
-- 변경하려는 자료형의 크기보다 큰 값이 존재할 경우 오류 발생
-- 일부 값이 너무 커서 열 길이를 줄일 수 없음
ALTER TABLE dept_copy MODIFY dname VARCHAR2(5);
-- 열에 등록된 값이 있을경우 데이터 타입 변경 불가
ALTER TABLE dept_copy MODIFY dname NUMBER;
-- 다중 수정
ALTER TABLE dept_copy
MODIFY department_name VARCHAR2(40)
MODIFY dname DEFAULT '미국';
/*
3)컬럼 삭제(DROP COLUMN)
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
- 데이터 값이 들어있어도 삭제됨
- 삭제된 칼럼은 복구 불가능(DLL구문은 ROLLBACK 불가능)
- 테이블에 최소한 한개의 컬럼은 존재해야함
- 참조되고 있는 컬럼이 있다면 삭제가 불가능
*/
ALTER TABLE dept_copy DROP COLUMN department_id;
ALTER TABLE dept_copy DROP COLUMN department_name;
ALTER TABLE dept_copy DROP COLUMN parent_id;
ALTER TABLE dept_copy DROP COLUMN manager_id;
ALTER TABLE dept_copy DROP COLUMN create_date;
ALTER TABLE dept_copy DROP COLUMN update_date;
ALTER TABLE dept_copy DROP COLUMN cname;
-- 마지막 하나는 삭제 불가, 테이블에 최소한 하나의 컬럼은 존재해야함
ALTER TABLE dept_copy DROP COLUMN dname;
ALTER TABLE dept RENAME COLUMN department_id TO dept_id;
ALTER TABLE dept RENAME COLUMN department_name TO dept_name;
ALTER TABLE emp RENAME COLUMN department_id TO dept_id;
ALTER TABLE emp RENAME COLUMN employee_id TO emp_id;
ALTER TABLE job_history RENAME COLUMN employee_id TO emp_id;
ALTER TABLE job_history RENAME COLUMN department_id TO dept_id;
ALTER TABLE sales RENAME COLUMN employee_id TO emp_id;
/*
2)제약조건 추가/삭제
2-1)제약조건 추가
PRIMARY KEY(UNIQUE + NOT NULL) : ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] PRIMARY KEY(컬럼명);
UNIGUE : ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] UNIQUE(컬럼명);
CHECK : ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] CHECK(컬럼명);
NOT NULL : ALTER TABLE 테이블명 MODIFY 컬럼명 [CONSTRAINT 제약조건명] NOT NULL;
*/
-- dept_copy
-- dept_id pk
-- dept_name unique
-- update_date not null
ALTER TABLE dept_copy ADD CONSTRAINT dept_copy_dept_id_pk PRIMARY KEY(dept_id)
ADD CONSTRAINT dept_copy_dept_name_uq UNIQUE(dept_name)
MODIFY create_date CONSTRAINT dept_copy_update_date_nn NOT NULL;
SELECT uc.constraint_name, uc.constraint_type, uc.table_name, ucc.column_name
FROM user_constraints UC
JOIN user_cons_columns UCC
ON uc.constraint_name = ucc.constraint_name
WHERE ucc.TABLE_NAME = 'DEPT';
-- 테이블 구조 확인
DESC dept_copy;
-- PK : NULL이 입력 불가능하고 중복된 값이 저장될 수 없다
INSERT INTO dept_copy(dept_id, dept_name, create_date) VALUES(10, '테스트', SYSDATE);
-- 제약조건은 수정이 불가능->삭제 후 다시 만들어야 함
ALTER TABLE dept_copy DROP CONSTRAINT dept_copy_dept_id_pk;
-- NOT NULL 제약조건은 MODIFY를 이용하여 수정
ALTER TABLE dept_copy MODIFY create_date NULL;
/*
3)테이블명/컬럼명/제약조건명 변경
3-1)컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 변경할 컬럼명;
3-2)제약조건의 이름 변경
ALTER TABLE 테이블명 RENAME CONSTRAINT 기존제약조건명 TO 변경할제약조건명
3-3)테이블의 명칭을 변경
(1)ALTER TABLE 테이블명 RENAME TO 변경할 테이블명;
(2)RENAME 기존테이블명 TO 변경할 테이블명;
*/
-- 기본키 제약조건을 설정하려고 하는데 데이터가 중복되어 있는경우
-- 검증할 수 없습니다. <- 잘못된 기본 키입니다 오류발생
-- 식별키
ALTER TABLE dept_copy2 ADD CONSTRAINT dept_copy2_dept_id PRIMARY KEY(dept_id);
-- 컬럼의 이름을 수정
ALTER TABLE dept_copy2 RENAME COLUMN dept_name TO dept_title;
-- 제약조건의 명칭을 수정
ALTER TABLE dept_copy2 RENAME CONSTRAINT SYS_C0011140 TO dept_title_nn;
-- 테이블 명칭을 변경
-- dept_copy2 -> dept_test
ALTER TABLE dept_copy2 RENAME TO dept_test;
SELECT * FROM dept_test;
RENAME dept_test TO dept_copy;
DROP TABLE dept_copy;
'Study > SQL' 카테고리의 다른 글
13.JOIN (0) | 2023.05.05 |
---|---|
12.기본키,외래키 (1) | 2023.05.04 |
9.그룹함수 (0) | 2023.05.01 |
8.선택함수 (0) | 2023.04.30 |
7.NULL처리 함수 (0) | 2023.04.29 |
댓글