1~20. 일부 DBMS에서는 CHAR와 VARCHAR는 영문자를 기분으로 1Byte를 할당하고, NCHAR와 NVARCHAR는 유니코드를 기준으로 2바이트를 할당한다. 그래서 영문자를 입력할 계획이라면 CHAR나 VARCHAR를, 한글을 입력할 계획이라면 NCHAR와 NVARCHAR를 사용한다.
하지만, UTF-8로 셋팅되어 CHAR, VARCHAR에 영문/숫자/기호를 입력하면 1바이트를 할당하고, 한글/중국어/일본어 등을 입력하면 내부적으로 3byte를 할당하므로 NCHAR와 NVARCHAR를 사용할 필요가 없다.
2~3. Char는 null 저장시에 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 : 테이블에 정보 조회
Alter에 primary, 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 : insert시 birthYear를 입력하지 않으면 -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제약조건의 효과를 낼 수 있다.
'SQL' 카테고리의 다른 글
[MySQL_MariaDB] 데이터타입 정리 (0) | 2021.03.10 |
---|---|
[SQL] where조건모음_select구조_그룹바이_형변환 (0) | 2021.03.09 |
[MySQL_MariaDB] Ansi_데이터베이스,테이블,열조회_알리아스 (0) | 2021.03.07 |
[MySQL/MariaDB] 사용자 관리 (0) | 2021.03.06 |
[MySQL] 모델링_워크벤치ERD (0) | 2021.03.05 |