2024. 10. 27. 12:02ㆍoracle
/* 중요도 최하 ! 알고만있고 나중에 검색해서 써라
[ DDL : DATA DEFITION LANGUAGE ]
객체들을 새롭게 생성(CREATE)하고 수정(ALTER)하고 삭제(DROP)하는 구문
DQL : SELECT → 질의
DML : INSERT / UPDATE / DELETE → 데이터 조작
DDL : CREATE / ALTER / DROP → 구조 정의
1. ALTER
객체 구조를 수정하는 구문
[ 테이블 수정 ]
ALTER TABLE 테이블명 수정할내용;
- 수정할 내용
1) 컬럼 추가 / 컬럼 수정 / 컬럼 삭제
2) 제약조건 추가 / 삭제 → 수정은 불가 (삭제 후 다시 추가)
3) 테이블명 / 컬럼명 / 제약조건명
*/
-- 1) 컬럼 추가 . 수정 / 삭제
SELECT * FROM DEPT_COPY;
-- 1_1) 컬럼추가(ADD): ADD 추가할컬럼명 자료형 DEFAULT 기본값(DEFALUT는 생략 가능)
-- BOSS 컬럼 추가
ALTER TABLE DEPT_COPY ADD BOSS VARCHAR2(20);
-- 새로운 컬럼 추가 시 기본적으로 NULL 값이 채워짐
-- LOCATEION_NAME 칼럼 추가 DEFAULT 값 지정해서
ALTER TABLE DEPT_COPY ADD LOCATION_NAME VARCHAR2(20) DEFAULT '한국';
-- NULL값이 아닌 DEFAULT값으로 채워짐
-- 1_2) 컬럼수정(MPDIFY)
-- 데이터 타입 수정: ALTER TABLE 테이블명 MODIFY 수정할컬럼명 바꾸고자하는데이터타입;
-- DEFAULT 값 수정: ALTER TABLE 테이블명 MODIFY 수정할컬럼명 DEFAULT 바꾸고자하는기본값;
SELECT * FROM DEPT_COPY;
-- DEPT_ID 칼럼 데이터타입을 CHAR(3)로 변경
ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3);
--ALTER TABLE DEPT_COPY MODIFY DEPT_ID NUMBER;
--ALTER TABLE DEPT_COPY MODIFY DEPT_TITLE VARCHAR2(10); -- 이미 10바이트 넘는게 있어서 줄일수없음
-- 현재 변경하고자 하는 칼럼에 이미 담겨있는 값과 완전히 다른 타입 OR 작은 크리로는 변경이 불가능하다
-- 문자 → 숫자 (X) / 문자열 사이즈 축소 (X) / 크기를 확대 (O)
-- DEPT_TITLE 컬럼 데이터타입을 VARCHAR2(40)
-- LOCATION_ID컬럼 데이터타입을 VARCHAR2(3)
-- LOCATION_NAME 컬럼 기본값을 '미국'
ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE VARCHAR2(40)
MODIFY LOCATION_ID VARCHAR2(3)
MODIFY LOCATION_NAME DEFAULT '미국';
CREATE TABLE DEPT_COPY2 AS
SELECT * FROM DEPT_COPY;
-- 1_3) 컬럼삭제(DROP COLUMN): DROP COLUMN 삭제하고픈 컬럼명
SELECT * FROM DEPT_COPY2;
ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_TITLE;
-- 마지막 칼럼은 삭제할 수 없음!
/*
CREATE TABLE AVB(
);
*/
--------------------------------------------------------------------------------
-- 2) 제약조건 추가 / 삭제
/*
2_1) 제약조건 추가
나만의 제약조건명을 만들어서 ADD [CONSTRAINT 제약조건명] 제약조건
주의사항: 현재 게정이 가지고있는 기존의 제약조건명과 충돌하면 안됨!!!
*/
ALTER TABLE DEPT_COPY
-- ADD CONSTRANINT DCOPY_UQ UNIQUE(DEPT_TITLE);
MODIFY LOCATION_NAME CONSTRAINT DCOPY_NN NOT NULL;
/*
2_2) 제약조건 삭제
PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK: DROP CONSTARINT 제약조건명
NOT NULL: MODIFY 컬럼명 NULL
*/
ALTER TABLE DEPT_COPY DROP CONSTRAINT DCOPY_UQ;
--------------------------------------------------------------------------------
-- 3)컬럼명 / 제약조건명 / 테이블명 변경(RENAME)
-- 3_1) 컬럼명 변경: ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;
ALTER TABLE DEPT_COPY RENAME COLUMN LOCATEION_NAME TO LNAME;
-- 3_2) 제약조건명 변경: ALTER TABLE 테이블명 RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명;
ALTER TABLE DEPT_COPY RENAME CONSTRAINT DCOPY_NN TO DCOPY_NOT_NULL;
SELECT * FROM DEPT_COPY;
-- 3_3) 테이블명 변경: ALTER TABLE 테이블명 RENAME 기존테이블명 TO 바꿀테이블명;
ALTER TABLE DEPT_COPY RENAME TO DEPT_TEST;
SELECT * FROM DEPT_TEST;
ALTER TABLE DEPT_TEST ADD PRIMARY KEY(DEPT_ID);
CREATE TABLE DEPT_CHILD(
DEPT_ID CHAR(3) REFERENCES DEPT_TEST(DEPT_ID)
);
INSERT INTO DEPT_CHILD VALUES('D1');
COMMIT;
--------------------------------------------------------------------------------
/*
2. DROP
객체를 삭제하는 구문
*/
SELECT * FROM DEPT_TEST; -- 부모테이블
SELECT * FROM DEPT_CHILD; -- 자식테이블
DROP TABLE DEPT_TEST;
-- 데이터가 자식 테이블에서 참조되고있음!
-- 1. 자식테이블을 먼저 삭제한 뒤 부모테이블을 삭제
DROP TABLE 자식테이블;
DROP TABLE 부모테이블;
DROP USER 머시기 CASCADE; -- 그냥 다 날려버리기!!! 위험하긴해요~
'oracle' 카테고리의 다른 글
| Oracle_TCL_INSERT/ UPDATE/ DELDTE (1) | 2024.10.27 |
|---|---|
| Orcale_DML_INSERT / UPDATE / DELETE (0) | 2024.10.27 |
| Orcale_DDL_CREATE / ALTER/ DROP (5) | 2024.10.23 |
| Oracle_DML_SUB QUERY 서브쿼리 (3) | 2024.10.21 |
| Oracle_DML_FUNCTION (2) | 2024.10.20 |