2021 0804

서성민·2021년 8월 4일
0
post-thumbnail

mysql 설치

workbench 실행

여기서 디폴트 버전과 커스톰 있는데 컴퓨터 용량이 여유가 있으면 디폴트 / 커스톰 은 사용자가 원하는 것을 선택해서 설치

커스톰 버전으로 위와같이 3개만 선택하여 설치를 하였다

참고로 위에3개만 선택하여도 컴퓨터 설치사항에 따라 추가적으로 다른파일이 설치될수 있다

이제 설치는 완료 mysql 이 설치되었다는 표시이다

MySQL Installer - Community 을 실행한다

지난 프로젝트를 만들었던 소스를 coppy 새로 만들었다

오라클로 연동되었던 프로젝트를 새로 mysql과 연동해서 할려고 coppy를 하였다

MySQL데이터 타입 #
문자형 데이터타입 #
데이터 유형 정의
CHAR(n) 고정 길이 데이터 타입(최대 255byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간 공백으로 채워진다.
VARCHAR(n) 가변 길이 데이터 타입(최대 65535byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간은 채우지 않는다.
TINYTEXT(n) 문자열 데이터 타입(최대 255byte)
TEXT(n) 문자열 데이터 타입(최대 65535byte)
MEDIUMTEXT(n) 문자열 데이터 타입(최대 16777215byte)
LONGTEXT(n) 문자열 데이터 타입(최대 4294967295byte)

char아니면 varchar 로 쓰면 된다

데이터 유형 정의
TINYINT(n) 정수형 데이터 타입(1byte) -128 ~ +127 또는 0 ~ 255수 표현 가능하다.
SMALLINT(n) 정수형 데이터 타입(2byte) -32768 ~ 32767 또는 0 ~ 65536수 표현 가능하다.
MEDIUMINT(n) 정수형 데이터 타입(3byte) -8388608 ~ +8388607 또는 0 ~ 16777215수 표현 가능하다.
INT(n) 정수형 데이터 타입(4byte) -2147483648 ~ +2147483647 또는 0 ~ 4294967295수 표현 가능하다.
BIGINT(n) 정수형 데이터 타입(8byte) - 무제한 수 표현 가능하다.
FLOAT(길이,소수) 부동 소수형 데이터 타입(4byte) -고정 소수점을 사용 형태이다.
DECIMAL(길이,소수) 고정 소수형 데이터 타입고정(길이+1byte) -소수점을 사용 형태이다.
DOUBLE(길이,소수) 부동 소수형 데이터 타입(8byte) -DOUBLE을 문자열로 저장한다.

int 형으로 주로 씀

날짜형 데이터 타입 #
데이터 유형 정의
DATE 날짜(년도, 월, 일) 형태의 기간 표현 데이터 타입(3byte)
TIME 시간(시, 분, 초) 형태의 기간 표현 데이터 타입(3byte)
DATETIME 날짜와 시간 형태의 기간 표현 데이터 타입(8byte)
TIMESTAMP 날짜와 시간 형태의 기간 표현 데이터 타입(4byte) -시스템 변경 시 자동으로 그 날짜와 시간이 저장된다.
YEAR 년도 표현 데이터 타입(1byte)

MySql유형이다

오라클과 다른점은 오라클에서는 varchar2/number 가 잇지만 mysql에서는 없다

스트링형은 char/varchar 로 쓰고 숫자형은 int형으로 주로 쓰인다


mysql 사용 예

#현재 접속된 user보기

select user();
#현재 db보기alter

select database();

#mysql db 사용
use mysql;

#모든사용자 보기
select *from user;

#사용자,생성 : user명 @접속host 근데 %는 모든 권한호스트를 한다는 의미
create user 'test'@'%' identified by '1111';

#db생성
create database testdb;

#등록된 데이타베이스폴더 dir이 속해져잇는거 보기
show variables like '%dir%';

#모든 데이타베이스확인
show databases;

#생성한 db를 사용자에게 권한 부여 grant all privileges on 데이타베이스 to 사용자
grant all privileges on testdb.* to 'test'@'%';


select user(); #현재사용자

select database(); #현재 db

use testdb; #사용 db 변경

#사용가능한 모든 character set (utf-8)로 할것이냐
show character set;

#테이블 목록

show tables;

#테이블 생성
create table sample (
num int primary key,
name varchar(20) not null
);

#sample 테이블의 charaterset 확인
show full columns from sample;

#데이터 추가
insert into sample(num,name)values(1,'홍길동');

select *from sample;


#게시물관리
drop table USERMANAGE;
drop table REPLY;
drop table BOARDFILE ;
drop table BOARD;
drop table MEMBER;

show tables;

#회원테이블
CREATE TABLE MEMBER(
USERID VARCHAR(50) NOT NULL, #회원아이디
PASSWD CHAR(60) NOT NULL, #암호화비밀번호
EMAIL VARCHAR(50) UNIQUE NOT NULL , #이메일
ZIP VARCHAR(5), #우편번호
ADDR1 VARCHAR(100), #도로명주소
ADDR2 VARCHAR(100), #상세주소
FILENAME VARCHAR(100), #프로필사진명
MEMO VARCHAR(1000), #개인소개글
ADMIN CHAR(1) DEFAULT '1', #0:ADMIN, 1:레벨1, 2:레벨2, 3:레벨3
EMAILAUTH CHAR(1) DEFAULT '0', #0:미인증, 1:인증
SIMPLEJOIN CHAR(1) DEFAULT '0', #0:일반가입, 1:네이버, 2:카카오
REGDATE DATETIME DEFAULT NOW(), #등록일자
PRIMARY KEY (USERID)
);

#게시물테이블
CREATE TABLE BOARD(
BNUM INT NOT NULL AUTO_INCREMENT, #게시물번호
USERID VARCHAR(50) NOT NULL, #작성자ID
SUBJECT VARCHAR(100) NOT NULL, #제목
CONTENT VARCHAR(1000) NOT NULL, #내용
READCNT INT DEFAULT 0, #조회수
LIKECNT INT DEFAULT 0, #좋아요
DISLIKECNT INT DEFAULT 0, #싫어요
IP VARCHAR(20) NOT NULL, #작성자의 IP
REGDATE datetime DEFAULT NOW(), #등록일자
MODIFYDATE datetime DEFAULT NOW(), #수정일자
REMOVEYN CHAR(1) DEFAULT 'N', #삭제여부(Y:삭제)
PRIMARY KEY (BNUM),
FOREIGN KEY (USERID) REFERENCES MEMBER(USERID)
);

#게시물의 파일테이블
CREATE TABLE BOARDFILE(
FNUM INT NOT NULL AUTO_INCREMENT,
BNUM INT NOT NULL,
FILENAME VARCHAR(50) NOT NULL,
REGDATE DATETIME DEFAULT NOW(),
PRIMARY KEY(FNUM),
FOREIGN KEY (BNUM) REFERENCES BOARD(BNUM)
);

#댓글테이블
CREATE TABLE REPLY(
RNUM int NOT NULL auto_increment, #댓글번호
BNUM int NOT NULL, #게시물번호
USERID varchar(50) NOT NULL, #작성자ID
CONTENT varchar(1000) NOT NULL, #내용
LIKECNT int DEFAULT 0, #좋아요
DISLIKECNT int DEFAULT 0, #싫어요
IP varchar(20) NOT NULL, #작성자의 IP
RESTEP int NOT NULL, #글순서
RELEVEL int NOT NULL, #글레벨
REGDATE datetime DEFAULT now(), #등록일자
MODIFYDATE datetime DEFAULT now(), #수정일자
PRIMARY KEY (RNUM),
FOREIGN KEY(BNUM) REFERENCES BOARD(BNUM),
FOREIGN KEY(USERID) REFERENCES MEMBER(USERID)
);

#조회/좋아요/싫어요 유저테이블
CREATE TABLE USERMANAGE(
GUBUM CHAR(1), #1:게시글, 2:댓글
NUM int, #게시글또는 댓글의 번호
USERID varchar(50) NOT NULL, #회원ID
STATE CHAR(1), #0:조회, 1:좋아요, 2:싫어요
PRIMARY KEY(GUBUM,NUM, USERID),
FOREIGN KEY(USERID) REFERENCES MEMBER(USERID)
);

#시퀀스 이용 안하고 auto_increment

show tables;

#전체 건수
SELECT count(*) totCnt from board;

#boardlist pagin 처리 #1-20개까지 보겟다 여기다가 댓글까지도
#검색하는 조건을 쓰고 리밋트 순번을 정하면 된다 1-20번까지
select *from board
order by bnum
limit 1, 20;

#댓글을 만들엇는데 댓글이 몇개나 달려잇는지 카운트 해서 조인 햇다

#boardlist pageing 처리
SELECT B., ifnull(R.RCNT,0) RCNT
FROM BOARD B LEFT JOIN
(SELECT BNUM , COUNT(
) RCNT
FROM REPLY
GROUP BY BNUM) R
ON (B.BNUM = R.BNUM)
order by b.bnum desc
limit 1, 10; #startno , 갯수

SELECT FROM MEMBER;
SELECT
FROM board;

select date_format(REGDATE,'%Y-%m-%d %T');

insert into member(userid,passwd,email,zip,addr1,addr2,filename,memo)
VALUES ('hong', '1111', 'JAVA55@GMAIL.COM', '11111', '신림동','100번지', '', '테스트');

insert into board(userid,subject,content,ip)
VALUES ('hong', '제목', '페이징테스트내용', '192,168,29,92');

#게시물 생성 프로시저
drop procedure if exists proc_board;
DELIMITER $CREATE PROCEDURE proc_board() BEGIN DECLARE i INT; SET i = 0; WHILE (i < 100) DO SET i = i + 1; INSERT INTO BOARD(userid, subject, content, ip) VALUES ('hong', '두번째제목', '페이징테스트내용', '192.168.1.10'); END WHILE; END $
DELIMITER ;

DROP PROCEDURE proc_board;

call proc_board();

#boardlist pageing 처리
SELECT B., ifnull(R.RCNT,0) RCNT
FROM BOARD B LEFT JOIN
(SELECT BNUM , COUNT(
) RCNT
FROM REPLY
GROUP BY BNUM) R
ON (B.BNUM = R.BNUM)
where SUBJECT LIKE concat('%' ,'','%')
or content LIKE concat('%' ,'','%')
order by b.bnum desc
limit 1, 10; #startno , 갯수

#여러건 저장
insert into boardfile(bnum,filename)
values
(2,'a.png'),
(2,'b.png');

select *from member;

Mysql 에서는 오라클에서 잇는 sysdate 가 없다 DATETIME DEFAULT NOW() 해주었고
오라클에서는 시퀀스가 잇엇지만 mysql에서는 없어서 AUTO_INCREMENT 이걸로 사용

0개의 댓글