29일차 오라클(테이블생성(CREATE,DROP,ALTER)/테이블구조변경(ADD,MODIFY,RENAME,DROP/제약조건(PRIMARY KEY,FOREIGN KEY,UNIQUE KEY,CHECK 제약조건,NOT NULL 조건/제약조건 이름부여_컬럼레벨,테이블레벨/제약조건추..
03.18 시험출제확정내용===============================================
<8> 제약조건<***>
- 테이블의 해당 컬럼에 잘못된 값이 입력/변경/삭제되는 것을 방지하기 위해
설정되는 조건(무결성 제약조건)
- 결함이 없는 데이터를 관리하기 위함
1) 종류
(1) PRIMARY KEY (기본키)
- 하나의 테이블에 하나만 존재하며 각 행을 식별하기 위한 용도로 사용
- NULL값을 허용하지 않고 중복값을 허용안함(NOT NULL + UNIQUE KEY)
(2) FOREIGN KEY (외래키,참조키)
- 부모테이블의 특정 컬럼(기본키)를 참조하는 컬럼
- 부모테이블에 참조하는 값이 없으면 오류가 발생한다.
DDL구문(CREATE, DROP, ALTER, ...)
DML구문(ADD, DELETE, UPDATE, SELECT)
<7> 테이블생성
- DDL구문 ( CREATE,DROP,ALTER,..)
1) 형식
CREATE TABLE 테이블명
(
컬럼명 데이터형,
컬럼명 데이터형,
...
);
2) 기본자료형
- NUMBER : 숫자(정수,실수)
예)
NUM NUMBER(5) --> 정수:5자리
AVER NUMBER(6,2) --> 실수:전체 6자리,소수점이하 2자리
- CHAR : 고정길이 문자열
예) JUMIN CHAR(13) //남는 공간에 빈 문자 생김
- VARCHAR2 : 가변길이 문자열(4000 Bytes) --자바에서는 문자열이 짧으면 VARCHAR2 주로사
용
예) ADDR VARCHAR2(100) //
- DATE : 날짜,시간
예) HIREDATE DATE
- TIMESTAMP : 날짜,시간(시/분/초/밀리초) 예; 경매시스템에 사용(초단위로 결과차이 나므로)
- LONG : 가변길이 문자열(2G Bytes) --자바와 호환이 잘 안됨
- RAW : 가변길이 바이너리 데이터(2000 bytes)
- LONG RAW : 가변길이 바이너리 데이터(2G Bytes)
- BLOB : 바이너리 데이터(4G Bytes)
- CLOB : 문자데이터(4G Bytes) --자바에서는 문자열이 길면 CLOB
예) DATA CLOB
--문자 이외에는 RAW/ LONG RAW/ BLOB 사용
예) 회원테이블만들기
- 아이디 (기본키)
- 비밀번호
- 이메일
- 나이
- 가입일
CREATE TABLE MEMBER
(
ID VARCHAR2(15) PRIMARY KEY, -- 기본키 설정
PWD VARCHAR2(10),
EMAIL VARCHAR2(15),
AGE NUMBER(3),
REGDATE DATE
);
Q1-- 임의의 회원정보를 3명 추가 해보세요.
INSERT INTO MEMBER(ID,PWD,EMAIL,AGE)
VALUES('JHTA1',111,'JHTA1@HTA.NET',29);
INSERT INTO MEMBER(ID,PWD,EMAIL,AGE)
VALUES('JHTA2',222,'JHTA2@HTA.NET',30);
INSERT INTO MEMBER(ID,PWD,EMAIL,AGE,)
VALUES('JHTA3',333,'JHTA3@HTA.NET',31,to_date('2020/03/01','yyyy/mm/dd'));
to_date('2020/03/01','yyyy/mm/dd')
ID PWD EMAIL AGE REGDATE
------------------------------ -------------------- ------------------------------ ---------- --------
JHTA1 111 JHTA1@HTA.NET 29
JHTA2 222 JHTA2@HTA.NET 30
JHTA3 333 JHTA3@HTA.NET 31
Q2-- 회원정보를 임의의 데이터로 수정해 보세요.
UPDATE MEMBER
SET REGDATE = SYSDATE;
UPDATE MEMBER SET PWD='0000' WHERE ID='BBB';
Q3-- 임의의 조건에 맞는 회원을 삭제해 보세요.
DELETE FROM MEMBER WHERE PWD=333;
3) 테이블삭제
DROP TABLE 테이블명;
DROP TABLE MEMBER;
자식테이블이 있는 부모테이블의 경우 바로 부모테이블 삭제 안됨
--자식테이블 먼저 삭제 후 부모테이블 삭제
DROP TABLE GRADE; --자식
DROP TABLE STUDENT; --부모
4) 테이블 구조 변경하기
<1> 컬럼추가
ALTER TABLE 테이블명 ADD(컬럼명 타입);
예) ALTER TABLE EMP ADD(EMAIL VARCHAR2(15));
<2> 컬럼변경
ALTER TABLE 테이블명 MODIFY(컬럼명 타입);
예) ALTER TABLE EMP MODIFY(EMAIL VARCHAR2(20));
<3> 컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 바꿀컬럼명;
예) ALTER TABLE EMP RENAME COLUMN EMAIL TO MAIL;
<4> 컬럼삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
예) ALTER TABLE EMP DROP COLUMN MAIL;
<8> 제약조건<***>
- 테이블의 해당 컬럼에 잘못된 값이 입력/변경/삭제되는 것을 방지하기 위해
설정되는 조건(무결성 제약조건)
- 결함이 없는 데이터를 관리하기 위함
1) 종류
(1) PRIMARY KEY (기본키)
- **하나의 테이블에 하나만 존재**하며 각 행을 식별하기 위한 용도로 사용
- NULL값을 허용하지 않고 중복값을 허용안함(NOT NULL + UNIQUE KEY)
(2) FOREIGN KEY (외래키,참조키)
- 부모테이블의 특정 컬럼(기본키)를 참조하는 컬럼
- ***부모테이블에 참조하는 값이 없으면 오류가 발생한다***.
(3) UNIQUE KEY(유일키) --중복 X
- 컬럼의 모든 값이 유일해야 하는 경우에 사용. 중복데이터를 허용하지 않음
- NULL은 허용됨(해당 유일키가 없는경우 안 넣어도 됨)-ex)이메일,전화번호가 없는 회원
(4) CHECK 제약조건(많이사용안됨)
- 조건에 맞는 데이터만 입력되도록 조건을 부여하는 제약조건
(5) NOT NULL 조건(많이사용됨)
- NULL값을 허용하지 않는 컬럼에 설정(ex: 회원가입시 이름 필수)
예1) 제약조건에 이름을 부여하지 않은 경우
CREATE TABLE DEPT1
(
DEPTNO NUMBER(2) PRIMARY KEY,
DNAME VARCHAR2(15) DEFAULT '인사부',
LOC CHAR(9) CHECK(LOC IN('서울','부산'))
);
INSERT INTO DEPT1(DEPTNO,DNAME,LOC) VALUES(1, '총무부', '서울');
INSERT INTO DEPT1(DEPTNO,LOC) VALUES(2, '부산');
INSERT INTO DEPT1 VALUES(3, '영업부', '서울');
예2)
CREATE TABLE EMP1
(
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(15) NOT NULL,
JUMIN CHAR(13) UNIQUE,
DEPTNO NUMBER(2) REFERENCES DEPT1(DEPTNO) -- 외래키설정
);
INSERT INTO EMP1 VALUES(99,'김포프','1234561098765',1);
예3) 제약조건에 이름을 부여하기 - 컬럼레벨과 테이블레벨이 있다.
- 컬럼레벨로 이름을 부여한 예
CREATE TABLE DEPT2
(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT2_DEPTNO PRIMARY KEY,
DNAME VARCHAR2(15),
LOC VARCHAR2(15)
);
- 테이블레벨로 이름을 부여한 예
CREATE TABLE EMP2
(
EMPNO NUMBER(4),
ENAME VARCHAR2(15) CONSTRAINT NN_NAME NOT NULL,
DEPTNO NUMBER(2),
CONSTRAINT PK_EMP2_EMPNO PRIMARY KEY(EMPNO),
CONSTRAINT FK_EMP2_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPT2
);
예3) 두 개이상의 컬럼이 PK로 설정된다면 테이블레벨로 설정해야 한다.
EX) 학생번호,점수 묶어서 성적번호로 처리
<두개 테이블 만들어서 INSERT넣고 테스트하기>
CREATE TABLE MYSTUDENT
(
STUNUM NUMBER(4), -- 학생번호
TERM VARCHAR2(5), -- 학기
SCORE NUMBER(3) NOT NULL,
CONSTRAINT PK_STUDENT PRIMARY KEY(STUNUM,TERM) -- 두개의 컬럼을 PK로
설정
);
2) 제약조건 추가하기/삭제하기
- 제약조건은 수정은 안되고 삭제와 추가가 가능하다.
예1) 제약조건 삭제하기
ALTER TABLE EMP2 DROP CONSTRAINT PK_EMP2_EMPNO;
예2) 제약조건 추가하기
ALTER TABLE EMP2 ADD CONSTRAINT PK_EMP2_EMP PRIMARY KEY(EMPNO);