0. Database
=> DBA : 설계, 최소화, 설치
- RDB MS : 관계형 데이터 베이스
- 장점 : 일관성 있게 안정적으로 데이터 관리, 관리자 및 일반사용자 구분 사용
- 단점 : Data처리가 느림, 배열을 직접 생성 및 입력을 제작해야함, 명령어 복잡함
- Oracle : 1521 포트 (1522, 1523 분리 가능 => 특수한경우 사용)
씨드가 존재, 포트 분리 가능, 다른 애들이 죽을때 살아있을 수 있음
But 유료!
- Mysql, MariaDB : 3306포트 => 포트가 같아서 같은 서버 불가능
Mysql도 lts버전 외엔 유료 / MariaDB는 무료
- Mssql : 1433 포트 => Windows Server (윈도우에서만 사용 가능해서 사라지는 추세)
유료
- PostgreSQL : 5432 포트 => 요즘 늘어나는추세
자바, 파이썬 개발자가 오라클, 포스트그레 좋아함
무료
- SQLite : 3000 포트
무료
- (여기서 두세가지는 할 줄 알아야함)
- (Mysql = MariaDB 퇴사자들이 만들어서 똑같음)
- NOsql : 비관계형 데이터베이스
- 장점 : Data처리가 빠름, 배열사용
- 단점 : 데이터 손실이 큼, 데이터 일관성이 없음
- Redis : 6379 포트
- MonogoDB : 27017 포트
- HBase : 37489 포트 (~60000포트)
=> MSA : 프로젝트 하나에 하나의 DB만 쓰는것이 아니라 서비스별 최적화 DB 사용
- DBMS : 데이터베이스 운영 소프트 웨어 => DBeaver 소프트웨어
- SQL DEVELOPER - Datavase를 관리하는 소프트웨어
- ORACLE : Oracle SQL DEVELOPER
- Mysql : Mysql WorkBench
- MSsql : Management Studio
1. 설치 참고
나는 brew로 설치함 -> 구글링하기
=====
MySQL Source 설치 - Archive 설치
1. Mysql을 zip 압축을 다운받음
2. 해달 압축 파일을 디렉토리 풀어줌
3. Cmd => 관리자모드로 접근
4. 해당 Mysql 디렉토리로 경로를 변경
cd를 이용하여 bin 디렉토리로
//5. 6. 번은 최초 한번만 실행
5. mysqld --install
6. mysqld --initialize => data디렉토리가 생성
7. net start mysql => mysql 실행
8. mysql -u root -p(window)
./mysql -u root -p (Linux)
//u = 유저 p = 패스워드
// => 루트유저로 패스워드를 이용해서 들어가겠다
2. 터미널 명령어
설치 경로
/usr/local/mysql/bin/
서버 실행
mysql.server start
mysql 실행
./mysql -u root -p
mysql 종료
exit
서버 종료
mysql.server stop
DB 설치정보 출력
\status
=> 꼭 언어셋 확인하기!
2. MySQL 명령어
1) DDL (Data Definition Language)
- create
- 데이터베이스 생성
- create database 데이터베이스명;
- 테이블 생성
- create table 테이블명(
컬럼명 자료형(크기),
컬럼명 자료형(크기)
);
- alter
- drop : 데이터베이스 삭제 (복구 불가)
- drop database 데이터베이스명;
- 사용시 매우 주의! 백업 해두기!
2) DML (Data Manipulation Language)
- select : 테이블 확인
- select * from 테이블명;
- 해당 테이블의 모든 정보 출력
- select * from 테이블명 where 컬럼명 ='데이터값';
- 해당 컬럼의 데이터 조건에 맞는 컬럼 출력
- insert : 테이블 입력
- insert into 테이블명(컬럼명,컬럼명) values ('데이터값','데이터값');
- update : 테이블 수정
- update 테이블명 set 컬럼명=‘데이터값’ where 컬럼명=‘데이터값’;
- delete : 테이블 삭제 (복구불가)
- delete from 테이블명 where 컬럼명=‘데이터값’;
- 사용시 매우 주의!
2) 기타
- show databases;
- 현재 생성된 데이터베이스 리스트를 모두 보여줌
- information_schema, performance_schema는 삭제해도됨
- mysql, sys는 루트에서만 보이는데 절대 지우면 안됨! 다 날아감 큰일남!
- show tables;
- 테이블리스트를 보여줌
- use 데이터베이스명;
- 해당 데이터베이스를 사용함
- desc 테이블명;
- 테이블 구조 확인
- DDL의 desc : 테이블 구조
DML의 desc : 내림차순
3) 테이블 속성
- auto_increment : 자동증가값 +1
- MySQL에만 존재
- null : 값이 없어도 처리하는 속성
- not null : 값이 무조건 필수로 적용
- default : 기본 셋팅값
4) 테이블 속성
- 문자
- char : 문자
- varchar : byte문자 (특수문자)
- text : 많은 내용의 문자를 받을 경우
- tinytext (256byte)
- text(65000byte)
- mediumtext(16만byte)
- longtext(4GB)
- 숫자
- int : 숫자
- tinyint (1~127)
- smallint (6만)
- int (40억)
- bigint (1조8천억)
- int : 숫자
- 날짜
- date : 년, 월, 일
- time : 시간
- datetime : 년, 월, 일, 시, 분, 초
- timestamp : 서버에 있는 시간을 가져오는 속성 (SQL)
- default와 함께사용
- insert시 now()를 사용
- ex) default current_timestamp
- 라디오
- enum : 컬럼에 옵션을 미리 셋팅해 놓은 값으로만 저장시키는 속성
- 여러개 중 하나만 선택 (라디오의 속성값 받을때 사용)
- 체크박스
- set : 컬럼에 옵션을 미리 셋팅해 놓은 값으로 처리 여러개의 값 저장 가능
- 여러개의 값 중 여러개 선택 (체크박스의 속성값 받을 때 사용)
3. DB 설계시 주의점
- 기획서에 없지만 테이블에 넣어야하는것
- 가입일자, 회원번호
- 비밀번호 15자까지라고 mpass varchar(15) not null 쓰면 암호화했을때 DB에 안들어감!
- 전화번호, 우편번호 int 사용시 0이 사라져버림
- char로 설정하기
- 이름은 특수문자 안들어가니까 char
- 길이는 20 -> 10자
char의 범위 1~255
varchar도 1~255
255넘을시 text 사용
- 길이는 20 -> 10자
- 날짜 0000-00-00 은 없음
- 0001-01-01로 해야 가능
- 시간은 00:00:00 가능
- 가격
- 자료형 int 안됨 0이 안들어감 => char 사용하기
- 가격을 DB에 넣을땐 ,를 빼고 넣기 (코드짤때 다떼야하는 수고가 발생함)
- 전화번호는 -를 빼고 넣기
- 유무 => enum 으로 ('Y','N')
- primary는 절대 중복 안되는값
- 전체(*)보다 특정 컬럼만 뽑아내는게 속도가 더 빠름 (많이 빠르면 10배까지 빠름
[mysql db]
하나의 DB에 하나의 사이트가 만들어진다!
> show databases;
> use mysql;
> show tables;
해당 데이터베이스의 db, user 를 이용하여 사용자 만들기
일단 데이터베이스가 만들어져있어야함
그 데이터베이스의 권한을 부여
사용자와 DB를 이어줄땐
> use mysql;
꼭 여기서 만들어야함
> desc db;
일단 db의 구조를 확인하기
> desc user;
user 구조 확인하기
db버전에 따라서 구조가 다달라서 잘 알아보고 써야함
학원코드 막갖다쓰면 안됨 버전, 구조 확인하기
👉사용자 추가하기
[maria DB]
alter user 'koo'@'localhost' identified with mysql_native_password by 'a123456';
[mySQL]
create user 'koo'@'localhost' identified by 'a123456';
[일반 사용자 생성법]
1. mysql 5.1 이하 버전 - 기존 패스워드 변경
update user set password=password('패스워드 등록') where user='아이디';
2. mysql 5.1 이하 버전 - 새로 생성
insert into user(host,user,password) values('localhost','아이디',password('사용할 패스워드'));
3. mysql 5.5 이상 버전 - 사용자 추가
create user '아이디'@'localhost' identified by '사용할 패스워드';
4. mysql 5.7 이상 버전 - 기존 패스워드 변경
alter user '아이디'@'localhost' identified by '사용할 패스워드';
5. mysql 5.5 ~ 5.7 - 기존 패스워드 변경
update user set authentication_string = password('변경할 패스워드') where user='아이디';
6. mariaDB v8.0 이상 - 패스워드 변경
alter user '아이디'@'localhost' identified with mysql_native_password by '변경할 패스워드';
[일반 사용자에게 해당 Database 권한 부여하는 방법]
> desc db;
컬럼 갯수 꼭 확인하기!
>insert into db values('localhost','데이터베이스명','사용자아이디','y',...);
컬럼 갯수 확인해서 'y' 넣기
(현재 db는 22개여서 19개 넣은거고 다른 db에선 꼭 확인하고 넣기)
> mysql 리부팅하기
1. window => 서비스 => mysql80 => 재시작
2. 명령어로 재시작 : mysqladmin -u root -p reload ⭐️
예제)
> create user 'koo'@'localhost' identified by 'a123456';
사용자 생성
> select * from user;
사용자 생성됐는지 확인
> insert into db values ('localhost','cms','koo','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
사용자에게 권한 부여 ('y' 19개)
> mysql -u koo -p
> a123456
> show databases;
=> 서버 껐다가 키면 반영됨
> mysqladmin -u root -p reload
한번에 mysql 재실행!
[테이블 작성 예제]
회원가입 테이블
create table event(
midx int not null auto_increment,
mid varchar(20) not null,
mname char(20) not null,
mpass varchar(15) not null,
memail varchar(100) not null,
mtel char(11) not null,
maddrnum char(5) not null,
maddress varchar(100) not null,
maddress2 varchar(100) not null,
mdate datetime not null default '0001-01-01 00:00:00',
primary key(midx)
);
리뷰 게시판 테이블
create table review(
ridx int not null auto_increment,
writer char(30) not null,
email varchar(100),
subject varchar(255) not null,
btext text not null,
pros varchar(200),
cons varchar(200),
star tinyint(1) not null,
indate datetime not null default '0001-01-01 00:00:00',
primary key(ridx)
);