[days08] DDL - create, alter, drop와 테이블 기초
1. tbl_member 테이블 존재 확인
select *
from tabs
where table_name like 'TBL_M%';
2. 테이블 구조 확인
desc tbl_member;
3. 테이블 삭제
drop table 테이블명 purge;
4. 테이블명 변경
테이블명 tbl_member을 tbl_student 변경
rename tbl_member to tbl_student;
5. 새로운 컬럼(열) 추가
연락처 컬럼 tel varchar2(11), 비고 컬럼 etc varchar2(200) 추가
-> 기존 테이블 삭제 후 새로 생성하지 않고 수정 DDL( create, alter, drop )
alter table ... add : 컬럼 또는 제약조건 추가할 때 사용
컬럼 추가시 테이블의 행이 존재한다면, 새로 추가되는 컬럼은 이미 존재하는 모든 행의 값은 NULL로 초기화한다.
alter table tbl_member
add (tel varchar2(11), etc varchar2(200));
--add tel varchar2(11) 한개 컬럼 추가시 괄호()생략 가능
6. 컬럼 사이즈 수정
- 변경 대상 컬럼에 데이터가 없거나 null 값만 존재할 경우에는 size를 줄일 수 있다.
- 컬럼의 기본값 변경은 그 이후에 삽입되는 행부터 영향을 준다.
- 컬럼이름의 직접적인 변경은 불가능하다.
- 컬럼이름의 변경은 서브쿼리를 통한 테이블 생성시 alias를 이용하여 변경이 가능하다.
alter table tbl_member
modify(tel varchar2(11), etc varchar2(100));
7. 컬럼명 수정
ETC 컬럼명을 MEMO 라고 수정
--1. 별칭 사용하면 되니까 굳이 수정할 필요 없음
select etc as "memo"
from tbl_member;
--2. 굳이 바꾸겠다면
alter table tbl_member
rename column etc to memo;
8. 컬럼 삭제
테이블 삭제는 drop table 테이블명 purge;
alter table tbl_member
drop column memo;
9. truncate문과 delete문은 모두 레코드(행)를 삭제하는 역할이다.
delete from salgrade;
--5개 행 이(가) 삭제되었습니다.
delete from salgrade
where hisal>2000;
--조건 지정 가능
truncate문과 delete문 차이점은 ?
- delete는 레코드는 삭제하지만 commit, rollback 가능하다. (되돌리기 가능)
where 조건절을 붙여 원하는 레코드만 삭제가 가능하다.
- truncate 하면 완전히 삭제한다.
특정 레코드가 아닌 무조건 모든 레코드를 삭제한다.
- MS/SQL Server는 delete하면 롤백이 불가능하기 때문에 주의가 필요하다 !
ORA-02292: integrity constraint (SCOTT.FK_DEPTNO) violated - child record found
delete했을 때 위의 오류가 뜨는 이유
- Foreign Key 무결성 제약조건에 위배되기 때문이다.
- emp(deptno FK) , dept(deptno PK) 관계가 맺어져 있다.
- dept의 부서번호를 emp가 참조하도록 되어있는데 삭제하면 관계를 맺을 수 없기 떄문에 삭제가 불가능하다.
- 관계를 끊어야 (제약조건을 삭제해야) 삭제가 가능하다.