날아라쩡글이의 블로그입니다.
DDL 본문
728x90
반응형
DDL (데이터 정의 언어 )
- 오라클의 구조를 정의한다.
- CREATE, DROP, ALTER, TRUNCATE
- 데이터 베이스의 주요 객체를 생성한다.
- 테이블
- 데이터의 실제 저장소이다.
- 데이터의 기본 저장단위로 행과 열로 구성되어있다.
- 뷰
- 하나 이상의 테이블을 사용해서 만든 가상의 테이블이다.
- 실질적인 데이터를 저장하지 않는다.
- 시퀀스
- 오라클에만 존재한다.
- 일련번호 생성기
- 인덱스
- 검색성능을 향상시키기 위해 데이터에 대한 색인을 가지고 있다.
- 색인: 어떤 꾸러미에 들어있는 DB의 지름길 키이다.
- 값이 정렬되어있다.
- 동의어
- 객체에 대한 다른 이름을 제공하는 것이다.
- 객체 A를 B로 가르킬 수 있다.
- 트리거
- 테이블에 값을 변경하거나 입력시 다른 테이블의 값을 변경해주는 것이다.
- 스케쥴러
- 일정한 주기로 실행되는 것을 의미한다.
- 이벤트와 같은 역활을 한다.
- 테이블
DDL 테이블 생성
- create table(
컬럼명, 속성, [키값 설정]
)- 컬럼 생성의 경우 많이 사용하지 않는다.
- 테이블의 우측버튼을 클릭하면 테이블 생성이 있어서 GUI로 입력을 할 수 있다.
- SQL명령어를 입력하는 방법
- java -> table-> column -> 왼쪽 DDL -> export
- erd를 그려서 입력하는 방법이 존재한다.
DDL 테이블 삭제
- DROP TABLE
DDL 테이블 변경
- 컬럼 추가
- ALTER TABLE 테이블명 ADD (컬럼명 데이터타입(크기)) [기본값];
- 컬럼 수정
- ALTER TABLE 테이블명 MODIFY(컬럼명 데이터타입(크기)) [기본값];
- 컬럼 삭제
- ALTER TABLE 테이블명 DROP(컬럼명 데이터타입(크기)) [기본값];
- 테이블 이름 변경
- RENAME 테이블명 TO 새테이블명
- SQL에 대해서 테이블이름을 변경하는 것은 java구문도 수정해야하는 엄청난 일이다.
- 되도록 수정하지 않은 것이 좋다
- RENAME 테이블명 TO 새테이블명
- 테이블 절단하기 : 엑셀에서 행삭제하기와 동일
- TRUNCATE TABLE 테이블명;
- truncate table의 경우 아예 깨끗하게 삭제가 된다.
- rollback으로 다시 행을 살릴 수 없다.
- 테이블에서 모든 행을 제거한다.
- 해당 테이블이 사용하는 저장공간을 해제 한다.
- 테이블을 삭제하는 것은 delete ~ from 절을 사용하면 RollBack으로 다시 살릴 수 있다.
- TRUNCATE TABLE 테이블명;
시퀀스 (sequnce)
- 일련번호를 자동으로 생성하는 데이터 베이스 객체이다.
- 기본키 값(행을 대표하는 값)을 생성하는 데 주로 사용된다.
- 행을 추가할 때 획득 된다.
- creat sequence 시퀀스 명; 으로 생성된다.
- create sequence 시퀀스 명
- [ increment by a ]
- 전부 숫자로 입력한다.
- 한번에 얼만큼 증가 시킬 것인지 에 대한 설정이다.
- default값은 1이다.
- [ start with b ]
- 시작할 숫자 값을 입력한다.
- default값은 1이다.
- [ { maxvalue c | nomaxvalue } ]
- 최대값을 설정한다.
- default값은 nomaxvalue이다.
- 둘중에 하나로 선택하여 최대값을 입력할 수 있다.
- [ { minvalue d | nominvalue } ]
- 최소값을 설정한다.
- default값은 nominvalue이다.
- 둘중에 하나로 선택하여 최소값을 입력할 수 있다.
- [{ cycle | nocycle }]
- 설정한 최대값까지 갔다가 다시 처음 부터 시작하는 값이다.
- default는 nocycle이다.
- cycle을 설정할 경우 maxvalue의 값을 최대한 높은 숫자로 설정해야한다.
- [{ cache e | nocache }]
- 일련번호를 미리 생성하고 요청시에 전달하는 것이다.
- default의 값은 20이며, 메모리내에 20개를 저장해 놓고, 컴퓨터를 끄게 되면 번호가 사라지고 21번부터 다시 측정된다.
- 시퀀스의 삭제
- drop sequence 시퀀스명
- 시퀀스의 수정
- alter sequence 시퀀스명
- start with을 제외한 나머지는 설정을 변경할 수 있다.
- 시작값을 수정할 수 없는 이유는
- sequence는 고유한 data이다.
- start with을 다시 1로 수정하여 생성하게 될 경우 1이 중복되어 생성된다.
- primary key가 될 수없기 때문에 start with은 수정할 수 없다.
- 시작값을 수정할 수 없는 이유는
- 시퀀스 사용
- 시퀀스명.NEXTVAL
- 새로운 일련번호를 생성하는 것이다.
- 시퀀스명.CURRVAL
- NEXTVAL에서 생성한 일련번호를 가져와서 다른 필요한 부분에서 다시 사용하는 것이다.
- 많이 사용하지는 않는다.
- 시퀀스에서 현재 사용하는 값을 가져오는 것이아닌 방금전에 새롭게 발행한 값으로 가져온다.
- APP과 새롭게 연결할 떄마다 새롭게 NEXTVAL로 연결해야 CURRENT를 사용할 수 있다.
- 시퀀스명.NEXTVAL
이런방법과 혹은
- int seqNo = orderDao.setSequnceNo()로 메소드를 만들어서
order. setNo(seqNo)
deliverty.setNo(seqNo)
payment.setNo(seqNo)으로 입력값을 넣을 수 있다. - 만들어서 가져오기 때문에 insert문에서는 따로 생성을 하지 않아도 된다.
시퀀스 입력방법
- 직접 시퀀스를 입력할 수 있다. : 1개만 사용할 경우 이 방법을 이용한다.
- 시퀀스를 실행하는 쿼리를 만들어서 입력하는 방법으로 진행하기도 한다.
- 각기 입력을 하기위해서 여러테이블에 동일번호가 겹칠경우
- 이런 방식이 안전하다.
- 지금은 dao방식은 이렇게 진행하지만 spring은 current를 사용하게 하기 떄문에 시퀀스의 전략이 달라진다.
무결성 제약조건
- 데이터의 일관성과 무결성을 유지하기 위하여 정규화를 사용했었다.
- 테이블에 유효하지 않는 데이터가 입력되는 것을 방지한다.
- 이상한 데이터가 들어가서는 안된다.
- 해당 테이블에 데이터가 추가, 삭제, 변경될 때마다 무결성 제약조건을 검사한다.
- 위배시에는 추가,삭제,변경이 되지않도록 조절한다.
- 무결성 제약조건은 5가지의 종류가 존재한다.
- create table 테이블명 ();으로 생성할 때 무결성 제약조건을 생성한다.
- not null 제약조건
- 해당컬럼의 값이 null값이 입력되지 못하도록 지정한다.
- 고객테이블의 이름컬럼, 도서테이블의 제목컬럼, 상품테이블의 상품명컬럼처럼 null이 있으면 안될 때 사용한다.
- costomer_name varchar2(50) not null
- not null의 제약조건이다.
- unique 제약조건
- 고유키 제약조건이라고 불린다.
- 테이블 전체에서 고유한 값을 가져야한다.
- null의 입력이 가능하다.
- 고객정보를 등록할 때, 이메일은 동일해서는 안되지만, 홍보를 받기 싫어 입력을 하지 않을 때 사용하는 값이다.
- costomer_email varchar2(250) unique
- 중복을 허용하지 않지만, null값은 가능하다.
- 고유키
- primary key제약조건
- 기본키 제약조건
- 테이블의 각 행을 고유하게 식별할 수 있는 값을 가져야한다.
- 테이블 전체에서 고유한 값을 가져야하고, null값은 허용하지 않는다.
- costomer_no number(7) primary key
- 고유하게 식별하는 값으로, 아무이유없는 값을 입력하는 것이 제일 좋다.
- 시퀀스로 자동 증가값을 넣는 이유와 동일하다.
- 숫자 안담는 경우가 많다.
- 중복은 허용하지 않음, null값은 허용하지 않는다. 고유한값이 존재한다.
- check제약조건
- 제시된 조건을 만족하는 값을 가져야한다.
- customer_point numbr(10) check (customer_point >= 0)
- customer_gender char(6) check (customer_grade in('M','F'));
- 비교연산자로 조건을 제시한다.
- 참이되는 값만을 담을 수 있다.
- 제시된 조선식이 참이 되는 값만 허용한다.
- foreign key제약조건 (참조키 제약조건, 외래키 제약조건)
- customer_grade varchar2(10) references customer_grades(grade_id)
- 해당 컬럼의 값은 다른 테이블 혹은 같은 테이블의 특정 컬럼의 값과 관련된 값만을 가져야한다.
-
참조키와 외래키는 기본적으로 null값이 허용된다. not null의 설정도 가능하다.
그러나 부모테이블이 존재해야한다. - 부모테이블을 참조하는 자식테이블에 부모레코드를 참조하는 자식레코드가 남겨져있다면 무결성 제약조건으로 인하여 삭제할 수 없다.
- 자식테이블을 참조하고 있는 부모테이블은 제약조건이 따르고 있다.
- 부모테이블을 생성하고 자식테이블을 생성하지만 삭제를 할 때는
자식테이블을 먼저 삭제하고 부모테이블을 삭제해야 할 수 있다.- 자식 테이블 = 종속 테이블
- FOREING KEY로 설정된 컬럼은 부모테이블의 기존값과 일치하거나 NULL이어야한다.
- 부모 테이블 = 참조 테이블
- 자식테이블이 참조하는 부모테이블의 컬럼은 PRIMARY KEY 혹은 UNIQUE 제약조건이 정의된 컬럼이어야 한다.
- 사원 (부모 테이블, 종속 테이블)의 DEPARTMENT_ID는 부서( 자식테이블, 참조테이블)의 DEPARTMENT_ID를 참조한다.
- 부서 테이블 (자식테이블) MANAGER_ID는 사원테이블(부모테이블)의 EMPLOYEE_ID를 참조한다.
- 사원 테이블 (자식테이블)의 JOB_ID는 직종테이블(부모테이블)의 JOB_ID를 참조한다.
- 자식테이블에서 참조하고 있는 부모테이블의 행은 삭제 할 수 없다.
- 제약조건이 걸려있기 때문이다.
- 다른 테이블에서 참조시 테이블내에 동일한 값이 있으면 안되기 때문에 기본키와 유니크키만 참조 가능하다.
- 5가지의 제약조건은 테이블에 저장되는 값에 대해서 우리가 원치않는 값이 입력되지 않도록 하는 최소한의 장치이다.
- 자식 테이블 = 종속 테이블
제약조건의 정의
- 제약조건의 정의는 두가지로 나눠진다.
- 컬럼 레벨 제약조건의 정의
- 컬럼 레벨의 제약조건의 정의는 지금까지 앞서 이야기한 작성방법이 컬럼 레벨 제약조건이다.
- 컬럼 바로 옆에 작성을 하여 제약조건을 주는 방법이다.
- 테이블 레벨의 제약조건의 정의
- 테이블 레벨의 제약조건은 컬럼 옆이 아닌 컬럼 아래에 작성하는 제약조건이다.
- 하나 이상의 컬럼을 조합하여 제약조건을 정의할 수 있다.
- NOT NULL제약조건을 제외한 모든 제약 조건을 정의할 수 있다.
- 제약 조건을 작성하고, (컬럼명, 컬럼명)을 작성해주어야 한다.
- 2개이상의 컬럼을 조합할 경우 테이블 레벨의 제약조건을 정의해야한다.
- 설계시 JAVA TOOL을 이용해서 만들면 편하다.
- 물리모델
- 특정 DB에 꼭 맞게 DATA TYPE, SIZE을 작성한 것이 물리모델이다.
- 물리모델은 DB와 DDL을 만들 수 있는 중요한 지표이다.
- 논리 모델
- DATA TYPE을 작성하지 않고 컬럼의 이름을 작성해 놓는다.
- 테이블의 정보를 쉽게 파악할 수 있다.
- 논리모델은 1개에 물리모델은 여러개로 만들 수 있다.
- 논리모델의 경우 비개발자와 협의시 사용한다.
- 컬럼 레벨 제약조건의 정의
반응형
'중앙 HTA (2106기) story > JDBC story' 카테고리의 다른 글
상호연관서브쿼리, 분석함수, 계층, 권한분석 (0) | 2021.11.02 |
---|---|
VIEW,인덱스, 서브쿼리 (0) | 2021.10.29 |
join, 정규화 간단 (0) | 2021.10.27 |
SQL 내장함수, 서브쿼리 (0) | 2021.10.25 |
VO-DAO패턴, 오라클 시퀀스 (0) | 2021.10.21 |
Comments