본문 바로가기

SQL

[Mysql MariaDB] 테이블_개체생성규칙_테이블삭제

1~20. 일부 DBMS에서는 CHARVARCHAR는 영문자를 기분으로 1Byte를 할당하고, NCHARNVARCHAR는 유니코드를 기준으로 2바이트를 할당한다. 그래서 영문자를 입력할 계획이라면 CHARVARCHAR, 한글을 입력할 계획이라면 NCHARNVARCHAR를 사용한다.

 하지만, UTF-8로 셋팅되어 CHAR, VARCHAR에 영문/숫자/기호를 입력하면 1바이트를 할당하고, 한글/중국어/일본어 등을 입력하면 내부적으로 3byte를 할당하므로 NCHARNVARCHAR를 사용할 필요가 없다.

2~3. Charnull 저장시에 char 공간을 모두 차지하지만, varchar는 공간을 차지하지 않는다. 따라서 null값을 많이 입력한다면 varchar가 좋다.

- 데이터베이스 개체에 이름을 줄 때 따라야할 규칙

> 알파벳 a~z,A~Z, 0~9, $, _ 를 사용할 수 있다. 하지만 기본적으로 영문 대문자나 소문자 어떤 것을 사용해도 소문자로 생성된다.

> 개체이름은 최대64자로 제한

> 예약어 사용불가(select, create, table…)

> 개체이름은 공백을 허용하지만 ` (백틱 esc 아래버튼)으로 묶어줘야한다.

* 식별자(Identifier) : 데이터베이스(스키마) 이름

* 데이터베이스 개체 : 테이블,인덱스,,트리거,스토어드 프로시저 등과 같은 개체

 

4. auto_increment : 지정할 때는 꼭 primary key 또는 unique로 지정해 줘야하고, insert문에서 null 값을 지정하면 자동으로 값이 입력된다.

9. auto_increment의 시작값을 지정하고 싶다면 위처럼.

10. auto_increment의 증가값을 변경하고 싶다면 위처럼.

 

15. Select last_insert_id() : auto_increment를 통해 마지막에 입력된 값을 보여준다.

 

Describe : 테이블에 정보 조회

 

Alterprimary, foreign key 걸기

6. unique : pk 처럼 중복을 허용하지 않지만, null을 허용한다. Null은 중복되어도 관계없다.

18. on delete cascade : 기본키가 삭제하면 외래키도 삭제한다.

- on update cascade : 기본키가 수정되면 외래키도 수정한다.

- on update no action : 기본키가 변경되어도 아무런 일이 일어나지 않는다. 기본값

 

복합키 생성

 

22. Show index from 테이블명 : pk fk 정보 조회, 위 스샷은 복합키 이므로 두열이 합쳐져 pk라고 조회됨.

 

 

12. Default : insertbirthYear를 입력하지 않으면 -1이 기본적으로 셋팅된다.

16. alter문을 이용해 default 값을 지정 가능.

18~19. insert할 때 default로 입력하거나, 아무것도 입력하지 않으면 default값이 셋팅.

 

Default : 값을 입력하지 않았을 때 자동으로 입력되는 기본 값을 정의

 

alter문을 통해서도 디폴트로 지정가능.

7. not null : 널값 허용안함

10. null : 널값 허용

 

* 테이블 압축

- Mysql 5.7.10이나 그 이후 버전은 위와 같이 설정되어 있다. 이전 버전은 그렇지 않을 수 있으니, my.ini파일이나 my.출 파일에 시스템 변수 값을 위와 같이 셋팅해줘야한다.

- 데이터 공간의 여유가 없으며 대용량 데이터를 저장하는 테이블이라면 테이블 압축을 고려해봐야 한다.

1. innodb_file_format 시스템 변수는 : Barracuda

2. innodb_large_prefix 시스템 변수는 : ON

 

하나는 정상적인 테이블, 하나는 row_format=compressed를 붙여 압축되도록 설정

 

30만건 정도 되는 데이터를 입력했다. 2번째인 압축테이블이 압축되면서 저장되기에 더 오래 걸린 것을 알 수 있다.

 

데이터베이스에 입력된 테이블의 상태를 확인해보자.

압축된 테이블의 평균 행 길이(Avg_row_length)나 길이(Data_length)가 훨씬 작은 것을 확인할 수 있다.

 

3~4. Temporary table 임시테이블 생성. Temptbl은 원래 없는 테이블이니 당연히 생성되고, employees는 기존 테이블을 무시하고 임시테이블을 생성한다.

* 임시테이블

- 세션 내에서만 존재하며 세션(커넥션)이 닫히면 자동으로 삭제된다.

- 기존에 있던 employees 테이블은 무시하고 임시테이블을 항상 바라본다.

6~7. Describe : 테이블의 정보를 조회한다.

 

기존에 있던 employees를 무시하고 임시테이블을 조회한다.

 

다른 커넥션으로는 임시테이블을 사용할 수 없다.

 

임시테이블의 삭제는 똑같다. Drop table employees

 

Drop : 테이블명을 여러 개 나열하여 한번에 삭제 가능

 

3. 컬럼 추가

5. 컬럼 삭제

7. 컬럼 변경

9. 외래키 삭제

11. 기본키 삭제

 

* check제약조건

> mysql은 다른 DBMS와의 호환성 때문에 문법상 허용. 실질적으로 지원하지 않는다. Trigger를 활용해서 Check제약조건의 효과를 낼 수 있다.