database/MYSQL

MYSQL // 테이블 생성 및 워크벤치

부엉이사장 2022. 7. 8. 23:55

### 데이터베이스 만들기

여긴 워크벤치에선 안가르쳐줌.. 걍 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은 걍 글자만

- 데이터베이스 정규화. 테이블명 짓기 규칙 같은거.. 예전에 테이블명에 숫자를 맨앞에 둬서 에러 존나뜬적있음 ㅋㅋ