본문 바로가기
DBMS

[MySQL] 설치 & 이관작업

by amoomar 2022. 2. 3.
반응형

 

 

MySQL의 설치와 기본 작동을 알아보고, 기존에 Oracle로 작업한 JDBC를 MySQL로 이관하는 작업에 대해 포스팅하였다.

 

 

 


 

 

1. 설치

 

1) 파일설치

: 타 블로그의 포스팅을 첨부하였다

 

https://blog.naver.com/coding_helper/222632830115

 

MySQL을 시작해보자. 설치편

[1] MySQL을 설치하기위해 우선 다운로드를 수행한다. [2] MySQL을 설치한다. 설치중에 발생한 모...

blog.naver.com

 

2) 스키마 생성

: 타 블로그의 포스팅을 첨부하였다. 파일 설치 완료 후 설치된 파일 중에서 아래 블로그에서 사용하는 프로그램을 실행하면 된다.

이때 스키마란 계정의 개념과 같다. 테이블들의 묶음이라고 할 수 있으며, DB의 구조와 제약조건에 관한 명세(설명)를 기술한 집합이라고도 설명할 수 있다.

 

https://blog.naver.com/coding_helper/222632837868

 

MySQL을 시작해보자. 설정편

1. password 1234 입력 2. show databases; 현재 기본 db들이 나오고있음을 확인할 수 있다. 3. kimdb를 생...

blog.naver.com

 


 

2. Foreign key

: 외래키라고도 한다. 테이블간의 관계에 대한 제약조건이라고 할 수 있으며, 다른 테이블의 pk를 참조하는 key이다.

즉, 이 foreign key를 통해 다른 테이블의 pk로 접근할 수 있다는 의미이다.

 

show databases;
show tables;

-- 모델링
-- 이용할 데이터를 DB에 맞게 설계하는것
-- 1 요구분석 2 개념설계(ERD) 3 논리설계(테이블) 4 물리설계(실제 생성) 5 구현
-- [1] 상품과 상품주문 테이블 2개가 필요하고,
-- 상품을 주문하면 그 내용이 상품주문 테이블에 저장된다.
-- 상품 상품번호,이름,가격 상품주문은 주문자정보가 포함되어있다.
-- [2] ERD
-- [3] 테이블 그리기
-- 상품 테이블 pk: 상품번호
-- 상품주문 테이블 pk: 주문번호  fk: 상품번호
-- [4]
create table product(
   pid int primary key auto_increment, -- 개체 무결성: 모든 테이블이 pk로 지정된 컬럼을 가져야한다.
    pname varchar(20) not null,
    price int default 10000
); -- create drop alter  DDL

insert into product (pname) values('목도리');
insert into product (pname) values('장갑');
insert into product (pname) values('가방');
select * from product; -- insert select update delete  DML

create table board(
   bid int primary key auto_increment,
    mname varchar(20),
    pid int, -- fk가 될 컬럼(속성)
    constraint testfk foreign key (pid) references product (pid) on delete cascade
    -- 제약조건명 |  대상이 되는 테이블의 pk가 fk로 설정되어야만한다!
);
insert into board values(1,'아무무',1);
insert into board values(2,'아리',2);
insert into board values(3,'티모',3);
insert into board values(4,'아무무',2);
select * from board;

drop table product; -- 테이블사이의 관계가 형성되면, 삭제시에도 순서가 생긴다. 의존성이 생겼다.
delete from product where pid=2; -- on delete cascade

 

* auto_increment *

오라클에서 "nvl(max(mNum),0))+1 from 테이블명"과 같은 역할을 한다. 즉, pk가 유일할 수 있도록 자동으로 생성시마다 +1을 해주는 기능을 한다. 이때 이미 생성된 테이블에서도 사용할 수 있는데, 방법은 아래와 같다.

#1부터 시작할 수 있도록 하는 문장
ALTER TABEL 'product' MODIFY 'pid' INT NOT NULL AUTO_INCREMENT;

#특정값으로 시작할 수 있도록 하는 문장
ALTER TABLE product AUTO_INCREMENT=시작할 숫자;

 

더 자세한 내용은 아래의 링크 포스팅에서 확인이 가능하다.

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=goddlaek&logNo=221005664911 

 

[Mysql] Auto Increment 사용하기

스키마를 작성하다보면 데이터의 수를 p.k로 설정해야 할때가 있다. 이럴경우 새로 데이터를 insert할때마...

blog.naver.com

 

 


 

 

3. 이관작업_Oracle에서 MySQL

 

1) 작업순서의 정리

  1. 정보 수집(MySQL에서 쓰이는 driverName, url , user, password)
  2. mysql.jar파일 설치 및 빌드패스 추가
  3. MySQL에서 테이블 생성
  4. 작동 확인

 

2) 작업결과

: JDBCUtill 클래스를 사용하여 DB에 접근하고 있으므로, 해당 클래스에서만 수정을 진행하였다.

 

① JDBCUtll변경

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 공통되는 로직을 따로 관리하기 위한 클래스
public class JDBCUtill {
	//static변수를 사용하여 자원으로 선언
	static final String driverName="com.mysql.cj.jdbc.Driver";
	static final String url="jdbc:mysql://localhost:3306/hamdb"; //hamdb부분은 본인이 사용중인 db이름 입력
	static final String user="root";
	static final String passwd="1234";
	
	// DB에 연결 == connection 확보하기에 ouput으로 설정
	public static Connection connect() {
		Connection conn = null;
		try {
			Class.forName(driverName);
			conn=DriverManager.getConnection(url, user, passwd);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	
	// conn, stmt 닫는 메서드
	public static void disconnect(PreparedStatement pstmt, Connection conn) {
		try {
			pstmt.close();
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 

② MySQL에서 테이블 생성

#테이블 생성
create table mem(
	id varchar(15) primary key,
	name varchar(15) not null,
	point int default 0
);

#초기 데이터 삽입
insert into mem values('asdf', '김길동', 200);
insert into mem(id, name) values('qwere', '박또치');
#삽입 확인
select * from product2;

# 테이블생성
create table product2(
	id int primary key,
	name varchar(50) not null,
	price int,
	cnt int default 0
);

#초기 데이터 삽입
insert into product2 values(1001, '신발', 30000, 5);
insert into product2 values(1002, '바지', 15000, 2);
insert into product2 values(1003, '나시', 5000, 10);

 

③ 결과확인

 

[출력화면 : -> 입력]

 

로그인할 아이디 입력 : 
asdf
===메뉴===
1. 목록조회 
2. 상품구매 
3. 서비스나가기
=========
1
[1001] 신발30000원 | 5개
[1002] 바지15000원 | 2개
[1003] 나시5000원 | 10개
===메뉴===
1. 목록조회 
2. 상품구매 
3. 서비스나가기
=========
2
구매할 상품번호입력>>> 1002
dao로그 : 사용자구매성공
dao:사용자 구매 성공
성공
===메뉴===
1. 목록조회 
2. 상품구매 
3. 서비스나가기
=========
2
구매할 상품번호입력>>> 1002
dao로그 : 사용자구매성공
dao:사용자 구매 성공
성공
===메뉴===
1. 목록조회 
2. 상품구매 
3. 서비스나가기
=========
3
이용해주셔서 감사합니다.
로그인할 아이디 입력 : 

 

바지의 재고가 2개에서 구매 완료 후 0개로 수정되었음을 확인 할 수 있다.

 

 

반응형

'DBMS' 카테고리의 다른 글

[ORACLE/TIBERO] 함수  (0) 2022.08.18
[DBeaver] Tibero 연결  (0) 2022.07.05
[Oracle] 능력단위평가 풀이  (0) 2022.01.28
[Oracle] 다양한 검색과 출력_Oracle 함수  (0) 2022.01.28
[Oracle] 프로젝트의 설계 & 두개의 TableDB  (0) 2022.01.26