이클립스에서 MySQL연결하기
: 오라클 DB 처음 연결하는 것과 똑같음, 새로운 DB생성하고 다운받은 jar파일 추가하고
다만 MySQL에서는 스키마 이름이 중요함, url에 마지막은 스키마 이름 넣을 것
(기본값으로 database로 되어있음)
Workbench에서 scott스키마에서 table을 오른쪽 클릭해서 create table을 클릭
→ 마우스클릭으로 편리하게 테이블 생성가능 → apply를 클릭하면 아래처럼 명령문이 나옴
그대로 복사해와서 DB와 연결한 spl파일에서 붙여 넣고 실행하면 됨
AUTO_INCREMENT : 오라클의 sequence를 대시하는 자동 숫자 증가 옵션
VARCHAR2는 없고, VARCHAR가 가변 길이 문자를 나타낸다.
CONSTRAINT 없이 제약 사항을 표시한다.
테이블 이름 앞에 스키마이름. 을 반드시 붙여서 사용해야 한다.
INT : 정수형 자료형(FLOAT, DOUBLE은 실수)
VARCHAR : 문자열 자료형, 가변 길이(CHAR는 고정 길이)
TEXT : 긴 문자열은 TEXT로 별도 저장
DATETIME : 날짜 자료형 저장
TINYINT
: -128에서 127까지 저장하지만 여기서는 1또는 0만 저장해서 Boolean값 표현
NOT NULL : 빈 값은 받지 않는다는 뜻(NULL은 빈 값 허용)
AUTO_INCREMENT
: 숫자 자료형의 경우 다음 로우가 저장될 때 자동으로 1 증가
UNSIGNED : 0과 양수만 허용
ZEROFILE : 숫자의 자리수가 고정된 경우 빈자리에 0을 넣음
DEFAULT now() : 날짜 컬럼의 기본값을 현재 시간으로
아래의 필드명을 담은 memberlist 테이블을 생성하기
필드명
: membernum(int, 자동증가, 기본키, not null), name(varchar(30), not null),
birth(date, not null), bpoint(int), joindate(date), age(int), gender(varchar(3))
테이블 comment : 회원 목록
기본 문자set : utf-8mb4
워크벤치에서 테이블 생성하는 명령 복사하는 것 권장
schema창에서 오른클릭 → Refesh All 클릭 → 이클립스 실행 반영
수정할 테이블이름을 오른클릭 → alter table 선택 → 수정하고 apply 클릭하면 명령문 이나옴
복사해서 이클립스에서 실행
set 아니고 change column
테이블 생성
테이블 이름 : rentlist
필드
: rentdate(datetime, default now()), numseq(int, AI), booknum(int)
membernum(int), discount(int)
외래키1 : rentlist의 booknum은 booklist의 booknum을 참조
외래키2 : rentlist의 membernum은 memberlist의 membernum을 참조
워크벤치의 alter table창에서 아래쪽 탭에 foreign key탭을 클릭하고 열린창에서 설정을 선택하고 apply하면 됨
MySQL에서는 On update CASCADE, On Delete CASCADE 둘 다 설정할 수 있다, 또 외래키에 자동으로 인덱스를 부여한다.
apply버튼 클릭 하고 이클립스 가지 않고 명령문을 확인하고 워크벤치에서 실행해도 됨
abs(숫자) : 절대값 계산
ceiling(숫자) : 값보다 큰 정수 중 가장 작은 수
floor(숫자) : 값보다 작은 정수 중 가장 큰 수
[실수를 무조건 버림(음수일 경우는 제외)]
round(숫자, 자리수) : 소수점 자리수만큼 남기고 아래서 반올림
truncate(숫자, 자리수) : round와 같은 동작이지만 반올림 아니고 버림
pow(x, y) : x의 y자승
mod(x, y) : x를 y로 나눈 나머지 계산
greatest(x,y,z...) : 주어진 숫자 중에서 가장 큰 숫자
least(x,y,z...) : 주어진 숫자 중에서 가장 작은 숫자
ascii(문자) : 해당 문자의 아스키 코드값
concat(문자열1, 문자열2, 문자열3...) : 주어진 문자열들 이어붙이기 연산
insert(문자열, 시작위치, 길이, 바꿀 문자열) : 문자열의 시작위치부터 길이만큼 바꿀 문자열로 대치
replace(문자열, 기본문자열, 바꿀 문자열) : 문자열 안에 있는 기본문자열을 바꿀 문자열로 대치
INSTR('문자열', '찾는 문자열) : 문자열 중 찾는문자열의 위치값을 출력
LEFT('문자열', 개수) : 문자열 중 왼쪽에서 개수만큼을 추출
RIGHT('문자열', 개수) : 문자열 중 오른쪽에서 개수만큼을 추출
MID('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 출력
SUBSTRING('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 출력
LTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.
RTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.
TRIM('문자열') : 양쪽 모두의 공백을 없앤다.
LCASE('문자열') or LOWER('문자열') : 소문자로 바꾼다.
UCASE('문자열') or UPPER('문자열') : 대문자로 바꾼다.
REVERSE('문자열') : 문자열을 반대로 나열한다.
COUNT(필드명) : NULL 값이 아닌 레코드의 수를 구한다.
SUM(필드명) : 필드명의 합계를 구한다.
AVG(필드명) : 각각의 그룹안에서 필드명의 평균값을 구한다.
MAX(필드명) : 최대값을 구한다
MIN(필드명) : 최소값을 구한다
now() : 현재 날짜와 시간(datetime형식)
curdate() or current_date() : 현재 날짜(date형식)
curtime() or current_time() : 현재 시간(time형식)
DATE_ADD(날짜, INTERVAL 기준값 더할숫자) : 날짜에서 기준값만큼 더한다
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
DATE_SUB(날짜, INTERVAL 기준값 뺄숫자) : 날짜에서 기준값만큼 뺀다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
YEAR(날짜) : 날짜의 연도 출력
MONTH(날짜) : 날짜의 월 출력
MONTHNAME(날짜) : 날짜의 월을 영어로 출력
DAYNAME(날짜) : 날짜의 요일을 영어로 출력
DAYOFMONTH(날짜) : 날짜의 월별 일자 출력
DAYOFWEEK(날짜) : 날짜의 주별 일자 출력
(일요일(1), 월요일(2), ... 토요일(7))
WEEKDAY(날짜) : 날짜의 주별 일차 출력(월요일(0), 화요일(1), ... 일요일(6))
DAYOFYEAR(날짜) : 일년을 기준으로 한 날짜까지의 날 수
WEEK(날짜) : 일년 중 몇 번째 주
FROM_DAYS(날 수) : 00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력
TO_DAYS(날짜) : 00년 00월 00일부터 날짜까지의 일자 수 출력
DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력
MySQL의 to_char() : 날짜 -> 지정형식으로
date_format(now(), '%Y%m%d')
예) select date_format(now(), '%Y%m%d') from dual;
➡️ 필드명:date_format(now(), '%Y%m%d') 값:20221123
MySQL의 to_date() : 문자 -> 날짜
str_to_date('20211013', '%Y%m%d')
예) select str_to_date('20211013', '%Y%m%d') from dual;
➡️ 필드명:str_to_date('20211013', '%Y%m%d') 값:2021-10-13
format | 설명 및 예시 |
---|---|
%a | 요일 (Sun ~ Sat) |
%b | 월 (Jan ~ Dec) |
%c | 월 (0 ~ 12) |
%D | 일 (1st, 2nd, 3rd, ...) |
%d | 일 (01 ~ 31) |
%e | 일 (0 ~ 31) |
%f | Microsecond (000000 ~ 999999) |
%H | 시간 (00 ~ 23) |
%h | 시간 (00 ~ 12) |
%I | 시간 (00 ~ 12) |
%i | 분 (00 ~ 59) |
%j | Day of the year (001 to 366) |
%k | 시간 (00 ~ 23) |
%l | 시간 (1 ~ 12) |
%M | 월 (January ~ December) |
%m | 월 (00 ~ 12) |
%p | AM or PM |
%r | 시간(12시)을 hh:mm:ss AM/PM 형식으로 |
%S | 초 (00 ~ 59) |
%s | 초 (00 ~ 59) |
%T | 시간(24시)을 hh:mm:ss 형식으로 |
표안의 format말고도 더 있음 %u, %y 등등
참고 링크 : https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
LIMIT
: select로 데이터 조회 할 때 조회할 레코드의 개수를 조절 제한 할 수 있다.
select*from scott.memberlist order by membernum desc limit 5;
회원 정보 조회하여 5개의 레코드만 리턴 (10번부터 6번까지 출력됨, desc:내림차순)
OFFSET
: select로 데이터 조회할 때, 맨 위에서 부터 offset에 지정한 번째 까지는 뛰어넘고 그다음 부터 리턴
select*from scott.memberlist order by membernum desc limit 3 offset 5;
5번째 데이터부터 3개의 레코드 리턴 - 개수가 부족하면 있는 곳까지 리턴
(5번부터 3번까지 출력 됨)
mysql> -h localhost -u root -p
: -h는 호스트, -u는 사용자, -p는 비밀번호
( 엔터 후 패스워드 입력 )
종료는 quit 또는 exit
Schema 생성
create schema scott default chracter set utf8mb4;
사용하려는 스키마로 이동
use scott;
현재 스키마의 케이블들 보기
show tables;
테이블의 구조 보기
desc 테이블 이름;
Workbench가 워낙 접근성이 좋고 편리해서 쓸일은 별로 없을듯
MySQL의 to_date() : 문자 -> 날짜
str_to_date('20211013', '%Y%m%d')
String으로 sql문을 작성해서 넘길 때 함수 안에 ?가 들어가면 문자인지 아닌지 구분을 못함
(확실하게 문자열로 인식하도록 해야 함)
수정하고자 하는 항목의 데이터를 입력받아서 레코드를 수정
첫번째로 수정하고자 하는 회원의 회원번호를 입력받고,
입력받은 회원번호로 조회해서 해당 회원이 존재하는지 확인
조회 메서드 이름은 getMemeber
없으면 없다고 출력하고 메서드를 종료
해당 회원이 있으면 그 회원의 정보를 mdto객체에 저장
수정데이터입력은 항복 하나씩 물어보고 입력받되,
수정이 필요없는 항복은 엔터만 쳐서 다음으로 넘어가기
수정 데이터 입력을 받기전에 기존 데이터 내용을 출력하여 안내하고 수정할 내용을 입력받기
레코드 수정 메서드 이름은 update