210129 금 TIL - mysql

bongf·2021년 4월 7일
0

지난TIL

목록 보기
2/4

티스토리에있던 TIL을 복사해왔다.
티스토리에서 작성했던 내용을 검색하면, 이 벨로그에 복사한다. ( 나중 검색, 누적학습을 위해)

Done


Learned

MySQL Bulk Insert

  • 출처 https://www.youtube.com/watch?v=qYM6d-0gW4w&ab_channel=DavidJung
  • 1) 우선 mysql에 테이블을 만든다
  • 2) python 또는 편한 파일로 해당 파일의 데이터를 생성하는 코드를 작성한다
  • 3) 해당 파일로 데이터를 생성해서 csv파일로 옮긴다
    • python gen_data.py 100 > data.csv
  • 4) csv파일을 도커의 root디렉토리에 복사한다 (현재 도커 위에 mysql 있는 상황)
    • docker cp data.csv 내도커이름:/root
    • cp라는 것은 복사해주는 docker 명령어
    • 현재 디렉토리랑 루트 디렉토리 연결해주는 방법으로 쓸 수 있다. 애초에 도커 만들 때 포트포워딩 해줬지만 이를 활용하기는 fail..(#todo)
  • 5) load data local infile 'data.csv' into table 테이블명 fields terminated by ",";

그 외 어제 삽질했던 MySQL 명령어? (아까워서... 정리라도..)

MySQL 명령어들 아래 사이트에서 연습할 수 있다

일정 기간 중에서 랜덤 날짜 INSERT

INSERT INTO user_log VALUES(
-> FROM_UNIXTIME(
-> UNIX_TIMESTAMP('2021-01-28 22-58-55') + FLOOR(0 + (RAND() * 2592000))
-> )
-> );
  • 2592000는 범위의 시간을 초로 바꾼 것이다. 위 명령어로 기준 시각에서 한 달의 시간 + 한 기간 중 랜덤한 날짜를 받는다
  • RAND 는 랜덤한 값 추출 ( 0에서 1사이의 실수가 나오기 때문에 원하는 초만큼 곱해주고 FLOOR로 나머지 버려준다)

decimal 랜덤 숫자 INSERT

INSERT INTO 테이블(컬럼값) VALUES(ROUND(RAND() * (10000000 - 1)+1));
  • RAND는 자바의 random과 비슷. 나는 10000000범위까지 수 중 랜덤한 수를 뽑고 싶어서 했다.
  • 1이상 10000000 미만의 수를 뽑을 수 있다

concat

  • 원래 일단 하나의 랜덤 데이터 만들어보자는 목적으로
  • 랜덤 문자열 + 랜덤 숫자의 조합으로 사용자 닉네임을 만들고자했다.
  • concat을 사용했는데 concat은 여러 문자열을 묶어준다.
  • select이랑 합쳐서 사용가능한데 select concat('문자열1', '문자열2"...) as 새로운컬럼명 from 기존테이블명;
  • 저 문자열 넣는 부분에 기존 테이블의 컬럼 명을 이용해서 그들을 합친 값을 낼 수 있다.
    : 예를 들어 id 1, name 김말자 / 새로운 컬럼 아이디&이름 이면 concat 뒤 괄호 안에 id'&'name 할 수 있다.
  • 나는 여러 난수 데이터를 합치는 것으로 해줬다.

    INSERT INTO user_log3(nickname) VALUES(CONCAT(FLOOR(RAND()_10), FLOOR(RAND()_10), FLOOR(RAND()*10), CHAR(FLOOR(65 + (RAND() *25))), CHAR(FLOOR(65 + (RAND() *25))), CHAR(FLOOR(65 + (RAND() *25)))));`

MySQL 그 외

  • 비밀번호 변경하기
    : SET PASSWORD = PASSWORD('비밀번호');

도커

  • #todo 더 공부해서 정리해야지
  • docker ps -all 은 docker의 모든 프로세스 리스트를 불러오는 명령어? 확인
  • docker images 하면 이미지들이 나오는데 이 이미지를 run 하면 컨테이너가 만들어지는 것이다

자바로 도커 위 mysql 조작

(1) jdbc 다운

: https://dev.mysql.com/downloads/connector/j/
: 난 윈도우 64bit 이므로 platform independent
: 파이썬에서도 postsql 쓰기 위해서 PythonPostgreSQLAdapter설치 했었는데

$python3-mpipinstallpsycopg2  
$python3manage.pymigrate

: 이거랑 비슷하게 db에 접근 하게 해주는 것 같다 ( #todo 정확하게 뭔지 공부하기)

(1-2) 인텔리제이에 jdbc 설치 https://whitepaek.tistory.com/18

: 우측 project structure 아이콘 - libaries - + - java - 다운 받았던 .jar 파일 찾아서 확인

(2) 내 포트 확인하기

  • docker ps 하면 docker의 컨테이너 목록 확인 (-a 하면 중지된 컨테이너까지 확인)

(3) 연동을 확인해보자

  • https://whitepaek.tistory.com/18 아주 친절히 설명해주신 블로그
  • 다만 나는 이분과는 다르게 처음에 포트포워딩을 해주었다. ((2)에서 포트 확인화면 나는 3306> 3306이다)
    : 로컬에서 3306으로 접근하면 여기 3306 포트로 연결되도록! 어제 til에 상세히 적은 블로그 소개
    : 그래서 난 url 넣은 부분이 "jdbc:mysql://localhost:3306/practice1"; 이다. pratice1은 데이터베이스명.

[##Image|kage@bAp0IT/btqVdMyNbbC/DVgmlPXbAeE4IGU7ZDZ1qK/img.png|alignCenter|data-origin-width="0" data-origin-height="0" data-ke-mobilestyle="widthContent"|||##]

이거 뜨게 하는데.. 하루가 걸렸어...

연동을 확인하는 코드의 이해...

: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html
: 에서 친절하게 설명해준다


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

Connection conn = null;  

try {  
conn =  
DriverManager.getConnection("jdbc:mysql://localhost/test?" +  
"user=minty&password=greatsqldb");

// Do something with the Connection


} catch (SQLException ex) {  
// handle any errors  
System.out.println("SQLException: " + ex.getMessage());  
System.out.println("SQLState: " + ex.getSQLState());  
System.out.println("VendorError: " + ex.getErrorCode());

: 잘 이해는 안가지만.. 다음에 더 이해하도록 해보자 오늘을 하루를 다써서.. (#todo)
: 위의 친절히 설명해 준 블로그와 로치님(춴재..)의 코드를 보니 Class.forName을 호출해서 이것의 의미만 간단히 이해하고자 했다.

눈물의 삽질 방지

  • 계속 DriverManager.getConnection error java.sql.SQLException: 연결 에러가 났었는데 내가 bongf 라는 계정으로 모든 권한을 주고, root 계정으로 접속하고 있어서 안 되었던 것이었다...

Bad

  • 미션 구현을 위해 다른 공부를 안했는데 미션을 결국 완료하지 못했다.

Good

  • 미션을 끝까지 구현하려고 한거 good 이면서 bad인

Feeling

  • 역시 다시 한 번 느끼지만 문제해결이 재밌다.
  • 공부밸런스는 아직 균형을 못잡겠다... 흠..
profile
spring, java학습

0개의 댓글