[SQL] DDL(Data Definiation Language)

*자동으로 COMMIT됨(AUTO COMMIT)

1.자주쓰이는 데이터 유형

CHARCTER(s)

  • 고정길이 문자열정보
  • (s)만큼의 최대 고정길이를 갖고 할당된 변수값의 길이가 s보다 작을때는 공백으로 채움
  • ‘AA’=’AA ‘

VARCHAR2(s)

  • 가변길이 문자열정보
  • s만큼 최대값 입력가능, s이하의 변수길이값입력시 변수길이만큼 바이트적용
  • ‘AA’ != ‘AA ‘

NUMBER-정수, 실수 등 숫자정보

  • NUMBER(4,2) 8은 전체자리수, 2는 소수점 자리수(1234.56)를 나타냄

DATE-날짜와 시각정보

  • 1초돤위로 관리*

2.CREATE TABLE

테이블 생성식

1
2
3
4
5
6
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE [DEFAULT 형식] [NULL || NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NULL || NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NULL || NOT NULL]
);

테이블 생성시 주의사항

  • 벤더에서 정의한 예약어는 쓸 수 없음
  • A-Z(대소문자), 0-9, _, $, # 문자만 허용됨
  • 테이블명 칼럼명 첫 글자는 반드시 문자로 와야함

제약조건(CONSTRAINT)

  • 사용자가 원하는 조건의 데이터남 유지하기위한, 데이터 무결성을 유지하기위해 특정 칼럼에 설정하는 제약
  • 테이블 생성시 추가하거나 테이블 생성후 ALTER TABLE 이용해서 추가할 수 있음
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
32
33
34
35
36
ALTER TABLE MEMBERS ADD CONSTRAINT CK_MEMBERS_POINT CHECK(POINT<10) NOVALIDATE;#PRIMARY KEY(기본키)-각 행의 고유의 식별 데이터-하나의 테이블당 한개만 설정 가능-NULL 입력 불가능#UNIQUE KEY(고유키)-행데이터를 고유하게 식별하기 위한 키-테이블당 여러개 설정 가능-NULL 입력 가능--기본키 및 외래키(TABLENAME1이름의 테이블이 생성되어 있다고 가정) 입력방법1
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE [DEFAULT 형식] [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NOT NULL],

CONSTRAINT PK_TABLENAME_COLUMNNAME1 PRIMARY KEY(COLUMNNAME1),
CONSTRAINT FK_TABLENAME_COLUMNNAME2 FOREGIN KEY(COLUMNNAME2)
REFERENCES TABLENAME2(COLMNUMNAME1)

);
--기본키 입력방법2
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE PRIMARYKEY [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NOT NULL],

);

--기본키 및 외래키(TABLENAME1이름의 테이블이 생성되어 있다고 가정) 입력방법3
--테이블 생성 후(테이블 명 = TABLENAME)
ALTER TABLE TABLENAME
ADD CONSTRAINT PK_TABLENAME_COLUMNNAME1 PRIMARYKEY(COLUMNNAME1);

ALTER TABLE TABLENAME
ADD CONSTRAINT FK_TABLENAME_COLUMNNAME2 FOREGIN KEY(COLUMNNAME2)
REFERENCES TABLENAME2(COLMNUMNAME1)

--기본키 및 외래키 삭제
ALTER TABLE TABLENAME
DROP CONSTRAINT PK_TABLENAME_CONLUNMNAME1;

ALTER TABLE TABLENAME
DROP CONSTRAINT FK_TABLENAME_CONLUMNNAME2;

NOT NULL

  • NULL 값 입력금지
  • DEFAULT상태에서는 NULL 허가
  • NULL : 공백(“”), 숫자0이 아님, 정의되지 않은 미지의 값, 현재 데이터를 입력하지 못하는 경우
    NULL + 0 = NULL;
    NULL + ‘CHAR’ = NULL;

CHECK

  • 입력할수 있는 값의 범위를 제한

FOREIGN KEY(외래키)

  • 관계형데이터베이스에서 테이블간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키 생성
  • 외래키 지정시 참조 무결성 제약옵선 선택가능

생성된 테이블 구조확인

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
DESCRIBE TABLENAME;
DESC TABLENAME;
```

### SELECT 문장을 통한 테이블 생성
TABLENAME과 같은 내용의 테이블 TABLENAME1을 복사해서 생성

```sql
CREATE TABLE TABLENAME1
AS SELECT * FROM TABLENAME;
```

## 3.ALTER TABLE

### ADD COLUMN
- 테이블에 컬럼 추가
- 추가된 칼럼은 테이블의 마지막 컬럼이 되고 컬럼위치를 지정하는것은 불가능

```sql
ALTER TABLE TABLENAME
ADD NEWCOLUMNNAME DATATYPE;
```

### DROP COLUNM
- 컬럼 삭제
- 데이터유무에 상관없이 삭제 가능
- 한번에 하나의 칼럼만 삭제가능
- 삭제후 최소 하나이상의 칼럼이 테이블에 존재해야함
- 삭제된 갈럼은 복구 불가능

```sql
ALTER TABLE TABLENAME
DROP COLUMN COLUMNNAME1;
```

### MODIFY COLUMN
- 칼럼 데이터 유형, 디폴트값(DEFAULT), NOT NULLL 제약조건 변경
- 칼럼의 크기를 늘릴 수는 있지만 줄일수는 없음(기존데이터 훼손방지)
- 칼럼이 NULL 값만 가지고 있으면 데이터 유형 변경가능\
- 칼럼에 행이 없거나 NULL값만 가지고 있으면 칼럼의 폭 줄이기 가능
- DEFALUT값 변경시, 변경작업 이후 발생하는 행 삽입에만 영향을 미침
- 칼럼에 NULL값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있음

```sql
ALTER TABLE TABLENAME
MONIFY (COLUMNNAME1 DATATYPE [DEFAULT] [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT] [NOT NULL]
);
```

### RENAME COLUMN
- 칼럼명 변경
- 해당 칼럼과 관계된 제약조건이 자동으로 변경

```sql
ALTER TABLE TABLENAME
RENAME COLUMN COLUMNNAME TO NEWCOLUMNNAME;

DROP CONSTRAINT

  • 테이블 생성시 부여했던 제약조건 삭제
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
ALTER TABLE TABLENAME
DROP CONSTRAINT PK_TABELNAME_COLUMNNNAME;
```

### ADD CONSTRAINT
- 제약조건 추가
- 외래키설정하면 참조된 테이블의 데이터 삭제가 불가능 할수도 있음

```sql
ALTER TABLE TALBENAME
ADD CONSTRAINT PK_TALBENAME_COLUMNNAME PRIMARY KEY(COLUMNNAME);

ALTER TABLE TABLENAME
ADD CONSTRAINT FK_TABLENAME_COLUMNNAME
FOREGIN KEY(COLUMNNAME) REFERENCES TABLENAME1(COLUMNNAME1);
```


## 4. RENAEM TABLE
### RENAME TABLE
- 테이블 이름변경

```sql
RENAME TABLE TABLENAME TO NEWTABLENAME;
```


## 5.DROP TABLE
### DROPT TABLE
- 테이블 삭제
- CASCADE CONSTRAINT는 해당 테이블과 관계있던 참조 제약조건도 삭제한다는 뜻

```sql
DROP TABLE TABLENAME [CASCADE CONSTRAINT];
```

## 6. TRUNCATE TABLE

### TURNCATE TABLE
- 테이블의 모든 행(데이터)삭제
- DML로 분류할수도 있지만 AOUTO COMMIT특성이 있어 DDL로도 구분가능
- DELETE와는 다름
- 정상적인복구가 불가능

```sql
TURNCATE TABLE TABLENAME;
# sql

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×