[SQL] 220318 테이블 변경

SeongEon Kim·2022년 3월 18일
0

SQL

목록 보기
3/4
post-thumbnail

테이블을 생성한 후 테이블을 변경하는 소스코드.
ALTER와 DELETE를 통해 수정, 추가, 제거를 할 수 있다.


-- 테스트용 테이블 : 컬럼명,값 들은 의미 없음. 형식과 제약조건만 주의.
CREATE TABLE tbl# (
acol varchar2(30) NOT NULL,
bcol varchar2(10),
ccol number(3)
);

INSERT INTO tbl#(ccol) values(12); -- 오류 : NOT NULL 컬럼 값이 저장안됨
INSERT INTO tbl#(bcol,ccol) values('xytz',12); -- 오류 : NOT NULL 컬럼 값이 저장안됨
INSERT INTO tbl#(acol,ccol) values('main',12); -- 정상실행

-- 컬럼 추가
ALTER TABLE tbl# ADD (dcol timestamp DEFAULT sysdate);
SELECT * FROM tbl#;

-- 컬럼 변경
ALTER TABLE tbl# MODIFY (ccol NUMBER(3) DEFAULT '0');
INSERT INTO tbl#(acol,ccol) values('main22',12);
INSERT INTO tbl#(acol) values('main22'); -- ccol이 '0'

-- 컬럼 제거(drop)
ALTER TABLE tbl# DROP COLUMN dcol;

-- 제약조건 추가(제약조건 이름 지정 필요)
ALTER TABLE tbl# ADD CONSTRAINT pk_tbl# PRIMARY KEY (acol);
-- 중복값이 있는 경우(무결성 위반) 중복되는 행을 삭제하고 기본키 추가.
DELETE FROM tbl# WHERE acol='main22' AND ccol=0;

-- 기존 제약조건은 변경 명령 없음.-> 기존 제약조건 삭제후 다시 생성.
ALTER TABLE tbl# drop CONSTRAINT pk_tbl#

-- tbl# 테이블에 age 컬럼을 생성. check 제약조건 : 16이상 90이하의 값.(조건식)
ALTER TABLE tbl# ADD age number(3) check (age BETWEEN 16 AND 90); -- age>=16 AND age <=90
INSERT INTO tbl#(acol,age) values ('apps',23); -- 실행
INSERT INTO tbl#(acol,age) values ('appss',23); -- 실행
INSERT INTO tbl#(acol,age) values ('app',99); -- 오류
-- tbl# 테이블에 gender(성별) 컬럼을 생성. check 제약조건 : 'M','F' 값만 허용.
ALTER TABLE tbl# ADD gender char(1) check(gender IN ('M','F'));
INSERT INTO tbl#(acol,gender) values ('momo','F');
INSERT INTO tbl#(acol,gender) values ('momo','X'); -- 제약 조건 위반 오류

profile
꿈을 이루는 사람

0개의 댓글