Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

DB-SQL 2절 본문

카테고리 없음

DB-SQL 2절

성추 2024. 7. 17. 16:57

데이터 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이라고 생각하면 된다. 

 

ANSI/ISO 기준으로는 숫자 타입의 NUMERIC TYPE의 하위 개념으로 여러가지 타입들이 있다. (SMALL INT , BIG INT , INTEGER , FLOAT , REAL 등등)

 

ORACLE 기준으로는 NUMBER의 한가지 숫자타입만 지원한다.

대표적인 4가지 데이터 유형

VARCHAR 와 CHARACTER:

VARCHAR는 크기도 가변으로 딱 그 만큼만 저장하고 CHARACTER는 고정길이 이하의 BYTE 크기라면 공간으로 채워서 저장한다.

문자열 비교에서는 서로 다른 문자열을 비교할때 CHARACTER은 그 길이차이만큼 공백으로 채워서 서로 비교하지만 VARCHAR 는 그대로 비교한다. 따라서 

이런 현상이 발생한다.

 

따라서 주민번호나 전화번호 같은 이미 알고있는 고정된 길이는 CHARACTER을 사용하고 아니라면 그냥 VARCHAR을 사용하라. (실제로 이런 길이를 미리 알지 못하는 경우가 더 많다.) 따라서 VARCHAR은 최대한의 한계값을 정의한것이라고 봐야한다. 

 

CREATE TABLE

테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정한다. 

기본키는 단일 칼럼이 아닌 여러개의 칼럼으로도 만들어질 수 있다.

삭제의 ABNORMAL : 정규화 안해놓았단 가정하에, 특정 팀이 해산되었을때 그 팀에 소속되었던 선수들 데이터까지 전부 지워버리는 이상이 생길수도 있음. 따라서 테이블 분리해놔서 팀코드의 테이블에서 해체된 팀만 데이터 삭제하면 됨.

CREATE TABLE 테이블이름 {
	칼럼명1 DATATYPE [DEFAULT 형식],
	칼럼명1 DATATYPE [DEFAULT 형식],
    칼럼명1 DATATYPE [DEFAULT 형식] ...
};

CREATE TABLE 테이블명(

속성명 data_type [DEFAULT 기본값] [NOT NULL], ...,

[PRIMARY KEY (기본키_속성명)],

[UNIQUE (대체키_속성명)],

[FOREIGN KEY (외래키_속성명) REFERENCES 참조테이블(기본키_속성명)]

[ON DELETE 옵션]

[ON UPDATE 옵션],

[CONSTRAINT 제약조건명] [CHECK (조건식)]

);

- 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다. 

- 각 칼럼들은 콤마 ","로 구분되고, 테 이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다

- 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

- 단수형의 테이블 이름을 권고한다.

- A-Z, a-z, 0-9, _, $, # 문자만 허용된다 (==특수문자 허용 안함)

- 테이블 생성시 대/소문자 구분은 하지 않는다.

- DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다

- 제약조건은 칼럼의 데이터 유형 뒤에 정의하는 칼럼 LEVEL 방식과 

- 마지막에 CONSTRAINT 로 모든 제약조건을 기술하는 테이블 LEVEL 방식

 

CONSTRAINT는 무결성을 강화하는 조건이다. 

NULL은 고유키 제약의 대상이 아니라서 NULL이 여러개 있어도 중복됐다고 보지는 않는다.

Oracle CREATE TABLE TEAM ( 
	TEAM_ID CHAR(3) NOT NULL, 
    REGION_NAME VARCHAR2(8) NOT NULL, 
    TEAM_NAME VARCHAR2(40) NOT NULL, 
    E_T EAM_NAME VARCHAR2(50),
    ORIG_YYYY CHAR(4),
    STADIUM_ID CHAR(3) NOT NULL, 
    ZIP_CODE1 CHAR(3),
    ZIP_CODE2 CHAR(3),
    ADDRESS VARCHAR2(80), 
    DDD VARCHAR2(3), 
    TEL VARCHAR2(10), 
    FAX VARCHAR2(10), 
    HOMEPAGE VARCHAR2(50),
    OWNER VARCHAR2(10),
    CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
    CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);

 

생성된 테이블 구조를 보고싶다면 

DESCRIBE 테이블명;

 

기존의 테이블을 통해 새로운 테이블을 만드는 방법도 있다. SELECT와 CREATE를 이용하면 된다.

CREATE TABLE TEAM_TEMP 
AS SELECT * FROM TEAM;

TEAM에서의 모든 칼럼을 가져와서 그대로 TEAM_TEMP 테이블을 만든다.

 

ALTER(ADD COLUMN , DROP COLUMN , MODIFY COLUMN , RENAME COLUMN , DROP CONSTRAINT , ADD CONSTRAINT )

기존의 생성된 테이블의 구조 변경할때 쓴다.

주로 칼럼을 추가/삭제, 혹은 제약조건을 변경할때 사용한다.

기본 골격

ALTER TABLE 

ADD (ADDRESS VARCHAR(8));



ALTER TABLE

DROP COLUMN ADDRESS;
ALTER TABLE 테이블명 ALTER 속성명 ~ 이 아닌 
MODIFY 절을 이용하여 칼럼의 제약조건을 변경 가능하다.

ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 ...);

 

기존의 테이블 칼럼에 대한 이름을 바꿔야된다면 RENAME COLUMN 절을 이용하라.

ALTER TABLE 테이블명
RENAME COLUMN 변경해야할 칼럼명 TO 새로운 칼럼명;

기존의 제약조건을 삭제하고 싶다면 DROP COLUMN절을 이용하라

ALTER 테이블명
DROP CONSTRAINT 제약조건명;

 

기존의 칼럼에 제약조건을 추가하고 싶다면 ADD COLUMN절을 이용하라

ALTER 테이블명
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);

ALTER과 관련된 주의점 및 특징

- 칼럼 크기를 늘릴 순 있어도 줄이면 기존 데이터에 영향이 가기에 줄일수는 없다

- 해당 칼럼이 NULL값만 가지고 있으면 데이터 유형 변경이 가능하다.

- DEFAULT 조건을 바꿨을경우 기존의 없던 데이터들도 다시 다 바뀌는게 아니라 그 바꾼 시점부터 적용된다. 

- 해당 칼럼에 NULL이 없을때만 NOT NULL 제약조건을 추가할 수 있다.

ALTER TABLE TEAM_TEMP
MODIFY (ORIG_YYY VARCHAT(8) DEFAULT '20020129' NOT NULL);

 

 

RENAME

 

ALTER에서는 칼럼에 대한 RENAME 이었고 여기는 테이블의 RENAME이다.

RENAME 변경전 테이블명 TO 변경후 테이블명;

 

DROP 

테이블 자체를 삭제.

외래키로 묶여있는 테이블도 싹다 지울려면 CASCADE, 

외래키로 묶여있는 테이블이 있을경우 지우지않을려면 RESTRICT

 

TRUNCATE TABLE

테이블 삭제는 아니고 테이블에 있는 모든 행을 지워버리고 테이블 스키마만 냅두는 명령어

테이블 스키마 자체를 삭제할려면 DROP을 이용하라

TRUNCATE TABLE 테이블명;

 

DELETE와는 뭐가 다르냐?

둘 다 결국 테이블의 데이터를 삭제하는 명령어가 맞지만 처리하는 방식 자체가 다르다. 따라서 테이블의 전체 데이터를 삭제하는 경우에는 DELETE보단 TRUNCATE가 유리하다. 단 TRUNCATE TABLE같은 경우 정상적인 복구가 불가능하다.