안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
ALTER
- table 객체에 대한 alter 구문은 컬럼/제약조건에 대한 수정 시 사용
sub 명령어
① add : 컬럼/제약조건 추가
② modify : 컬럼 (자료형, default값, not null) 변경 (제약 조건은 변경 불가(
③ rename : 컬럼/제약조건에 대한 이름 변경
④ drop : 컬럼/제약조건 삭제
ADD
- 컬럼 추가
- 테이블의 마지막 컬럼 순서로 추가 가능
컬럼 추가
create table tb_user(
no number,
id varchar2(20),
password varchar2(20)
);
alter table
tb_user
add
name varchar2(50) default '홍길동' not null; -- 제약 조건도 추가 가능
desc tb_user;
select * from user_tab_columns where table_name = 'TB_USER';
varchar2(50)의 name이라는 컬럼을 추가하였으며, default 값과 not null 제약 조건도 같이 추가하였습니다.
제약 조건 추가
-- 제약 조건 추가
alter table
tb_user
add
constraint pk_tb_user_no primary key(no);
select * from user_constraints where table_name = 'TB_USER';
no컬럼에 대해서 PK 설정을 하였습니다.
제약 조건 추가할 때
"ORA-00955: name is already used by an existing object" 이와 같은 에러메세지가 떴습니다.
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
WHERE OBJECT_NAME LIKE '%[테이블명]%'
위의 쿼리로 오류가 발생한 테이블의 object를 조회하여, 실습하며 생성했던 tb_user에서 tb_userrrr로 이름을 변경했던 테이블에 no 컬럼에 대해서 PK가 존재하고 있어서 발생한 오류로 보여, tb_userrrr 테이블을 drop하여 오류를 해결하였습니다.
MODIFY
- 컬럼에 대해서만 수정 (자료형, default값, not null)
alter table
tb_user
modify
name varchar2(150) default '' null;
-- default '' / default null -> 기본값 제거
-- not null -> null
desc tb_user;
select * from user_constraints where table_name = 'TB_USER'; --not null 확인
select * from user_tab_columns where table_name = 'TB_USER'; --default값 확인
name에는 기존에 default 값, not null 제약 조건이 설정 되어있었습니다.
이를 default '' null로 기본 값 제거 및 not null → null로 변경하였습니다.
not null 설정했던 (constraint_name : SYS_C007673) 것과 default 설정 했던 것이 없어진 것을 알 수 있죠.
insert into
tb_user(no, id, password)
values (1, 'honggd', '1234');
select * from tb_user;
컬럼 값이 varchar2(10)이고, 10byte 데이터가 있는 상황에서 varchar2(5)로 변경 가능? 불가!!!
컬럼 값이 varchar2(10)이고, 10byte 데이터가 있는 상황에서 varchar2(15)로 변경 가능? 가능!!!
RENAME
- 컬럼명 및 제약 조건명 변경
컬럼명 변경
alter table
tb_user
rename column password to pw;
desc tb_user;
제약 조건명 변경
alter table
tb_user
rename constraint PK_TB_USER_NO to pk_tb_user;
select * from user_constraints where table_name = 'TB_USER';
@실습문제
tb_user에 gender 컬럼 추가 char(1) M, F 허용하는 제약 조건 추가
alter table
tb_user
add
gender char(1)
add
constraint ck_tb_user_gender check(gender in('M', 'F'));
desc tb_user;
select * from user_constraints where table_name = 'TB_USER';
TABLE RENAME
- 테이블명 변경
alter table
tb_user
rename to tb_user_2;
select * from tb_user; -- ORA-00942: table or view does not exist
select * from tb_user_2;
테이블명 또한 변경할 수 있으며, 이전 테이블을 조회하려고 하니 "ORA-00942: table or view does not exist" 테이블을 찾을 수 없다는 에러 메세지가 출력됩니다.
DROP
- 컬럼 삭제
- 제약 조건 삭제 : 대상 컬럼 변경, 제약 조건 타입 변경 등은 불가하므로 삭제 후 재생성!
제약 조건 삭제
alter table
tb_user_2
drop constraint CK_TB_USER_GENDER;
select * from user_constraints where table_name = 'TB_USER_2';
컬럼 삭제
alter table
tb_user_2
drop column gender;
desc tb_user_2;
'DataBase > Oracle' 카테고리의 다른 글
DCL) 권한 부여 및 회수 (GRANT, REVOKE 구문) (0) | 2022.04.28 |
---|---|
DDL) DROP 구문 (0) | 2022.04.26 |
DDL/CONSTRAINT) CHECK 제약 조건 (0) | 2022.04.26 |
DDL/CONSTRAINT) FOREIGN KEY 제약 조건 (FK 제약 조건 삭제 옵션, 식별 관계/비식별 관계) (0) | 2022.04.26 |
DDL/CONSTRAINT) PRIMARY KEY 제약 조건 (단일 컬럼PK, 복합 컬럼PK) (0) | 2022.04.26 |