### 데이터베이스 만들기
여긴 워크벤치에선 안가르쳐줌.. 걍 cmd에서
C:\Program Files\MySQL\MySQL Server 8.0\bin경로로 가서
mysql -h localhost -u root -p 입력
비번치고 들어가~
mysql실행되면
CREATE SCHEMA 'nodejs' DEFAULT CHARACTER SET utf8;
치면 nodejs db가 만들어짐.
### 워크벤치에서 테이블 만들기
이렇게 데이터베이스 우클릭하면 create table을 할 수 있다.
각각 컬럼이랑 데이터타입등을 정해줄수 있다.
속성은 아래에 적을게~
**워크벤치에 쿼리문 사용시에 쿼리문 쓰고 새로고침해야 쿼리문 적용된 테이블이 나온다
쿼리문 안쓰고는 새로고침 안해도 알아서 되는듯.
sqlite에서 고객정보 다루는거랑 비슷한듯. database is locked
### 컬럼 속성
# 데이터타입
INT : 정수, 소수는 FLOAT 이나 DOUBLE 자료형 써~
VARCHAR(자릿수) : 0~자릿수인 문자열 넣을 수 있음. CHAR(자릿수)는 반드시 자릿수 길이의 문자열이 와야함
TEXT : 긴 글. VARCHAR는 수백자 이내만..
TINYINT : -128부터 127까지 숫자만 저장가능. 보통 불린쓸때는 0,1쓰니까 이걸로 하면됨
DATETIME : 날짜와 시간. 날짜만은 DATE, 시간만은 TIME
# 데이터 옵션
PK : 기본키 여부. 기본키란 로우를 대표하는 고유한 값. 보통은 id에 이키값을 부여함.
AI : auto increment 1씩 상승~
NN : not null 빈칸허용. not null인 데이터타입은 로우 생성시 반드시 값을 입력해야함.
UQ : unique index 해당값이 고유해야하니?
UN : unsigned 음수 무시하고 숫자 저장함. 음수는 들어갈수 없음.
ZF : 제로필 앞을 0으로 채우냐
default : 기본값
asc : 오름차순
desc : 내림차순
## 테이블 설정
COMMENT : 보충설명. 안적어도됨
DEFAULT CHARSET : 한글입력되게하려고.. CHARACTER SET ~
ENGINE : 걍써
## 쿼리문으로 테이블 만들기
자 이제 테이블을 직접 만들어보자.
create table nodejs.users ( //nodejs라는 데이터베이스에 users 라는 테이블 만들게~
id int not null auto_increment, // id는 INT고 필수값이어야하고 1씩 상승할거야~
name varchar(20) not null, // name은 20이하고 필수값이어야해~
age int unsigned not null, // age는 INT고 필수값이어야 하며 양의정수만 쓸 수 있어~
married tinyint not null, // married 는 결혼여부 불린값이라서 0,1만 들어가니 tinyint이고 필수값이야
comment text null, // comment는 긴글이고 안써도돼~ (댓글아니라 자기소개임)
created_at datetime not null default now(), // created_at이란 컬럼은 datetime타입이고 필수값이고 기본값은 현재 시간인 now()야~
primary key(id), // 기본값은 id 로 할래~
unique index name_unique (name asc)) // 이름은 고유값이고 오름차순으로 기억할거야~
comment = '사용자정보' //이테이블은 걍 사용자정보야~ (안적어도됨)
default character set = utf8 // utf8설정해서 한글쓸거야~
engine = InnoDB; // 이건 걍써~
///// 전문
create table nodejs.users (
id int not null auto_increment,
name varchar(20) not null,
age int unsigned not null,
married tinyint not null,
comment text null,
created_at datetime not null default now(),
primary key(id),
unique index name_unique (name asc))
comment = '사용자정보'
default character set = utf8
engine = InnoDB;
//////
comment테이블 만들기
////전문
create table nodejs.comments (
id int not null auto_increment,
commenter int not null,
comment varchar(100) not null,
created_at datetime not null default now(),
primary key(id),
index commenter_idx (commenter asc),
constraint commenter
foreign key(commenter)
references nodejs.users(id)
on delete cascade
on update cascade)
/////
#해석
create table nodejs.comments ( // nodejs데이터베이스에 comments라는 테이블 만들게
id int not null auto_increment, // id컬럼은 필수고 알아서 인덱싱 만들어줘~
commenter int not null, // 작성자 컬럼은 숫자고 필수값이야~
comment varchar(100) not null, // 댓글은 100이하 길이고 필수야~
created_at datetime not null default now(), // created_at컬럼은 datetime타입이고 필수고 now()가 기본값이야~
primary key(id), //고유값은 id야~
index commenter_idx (commenter asc), // 인덱스검. 작성자_게시글~ 이런식으로. commenter_idx는 인덱스명
commenter컬럼을 오름차순으로 인덱싱
----------------------------------
constraint commenter //커멘터에 제약을 걸거야 제약은 아래.
foreign key(commenter) // 외래키. 예를들어 user테이블의 id값이 3번이 없는데
작성자가 3번있으면안되니까.
users테이블에 있는 id값에 의존함.
연결이아니라 그냥 users테이블에 없는 id값은 사용하지 못하게하는거.
references nodejs.users(id) //제약조건(commenter)은 users테이블의 id값을 참조할거야~
on delete cascade //이 데이터와 연관된 데이터들도 같이 변할거야(삭제시)
on update cascade) //이 데이터와 연관된 데이터들도 같이 변할거야(수정시)
--------------------------------------------
comment = '댓글'
default charset=utf8mb4
engine=innoDB
///전문
create table nodejs.comments (
id int not null auto_increment,
commenter int not null,
comment varchar(100) not null,
created_at datetime not null default now(),
primary key(id),
index commenter_idx (commenter asc),
constraint commenter
foreign key(commenter)
references nodejs.users(id)
on delete cascade
on update cascade)
comment = '댓글'
default charset=utf8mb4
engine=innoDB
//////
기타 명령어
# show tables
테이블 다보여줘
# desc 테이블명
이 테이블 컬럼 속성 알려줘~
# drop table 테이블명
테이블 삭제해줘~
* 위와같이 참조값 정해준 테이블은 삭제가안됨.
먼저 comment테이블 삭제후에 삭제가능하게됨.
+++++++++++++++
- unsigned하면 tinyINt는 0~256으로 변함
- default now()말고 default 1로 하면 기본값이 1이야
- cascade 회원이 탈퇴하면 댓글들도 지울거니? 응 같이지울거임.
set null 댓글은 남아두고 작성자만 null됨(보통 많이씀)
no action 암것도안할게
- utf8mb4 이모티콘도 다 들어갈수있음. utf8은 걍 글자만
- 데이터베이스 정규화. 테이블명 짓기 규칙 같은거.. 예전에 테이블명에 숫자를 맨앞에 둬서 에러 존나뜬적있음 ㅋㅋ
'database > MYSQL' 카테고리의 다른 글
MYSQL // row쿼리 사용하는 연동하기. (0) | 2022.08.30 |
---|---|
MYSQL // sequelize 사용하기 (기본 요약) (0) | 2022.08.30 |
MYSQL // 복습 (0) | 2022.08.29 |
MYSQL // CRUD 작업 (0) | 2022.07.09 |
MYSQL // 쿼리문 SELECT (0) | 2022.07.07 |