티스토리에있던 TIL을 복사해왔다.
티스토리에서 작성했던 내용을 검색하면, 이 벨로그에 복사한다. ( 나중 검색, 누적학습을 위해)
Done
Learned
자바는 pass by value
- 210216 호눅스 강의 듣고 추가
- 생각보다 쉬운 개념이었다. pass by value
- 참조변수를 넘겨줄 때에도, 값 자체를 넘겨줄 때에도 자바는 그 값을 넘겨주는 거잖아. 참조변수에 저장되어 있는 주소'값'을 넘겨주는 것. 그러니까 다 값을 넘겨주는 것
- 0221 다시 정리하여 추가 https://bong-f.tistory.com/198
Docker & MySQL
Docker
소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하는 소프트웨어 플랫폼
도커로 mysql 설치
http://jmlim.github.io/docker/2019/07/30/docker-mysql-setup/
-
도커 버전 확인 docker --version
![](https://velog.velcdn.com/images%2Fbongf%2Fpost%2F64fa264d-cab1-4b6f-a2a8-ed278c69b5f6%2Fimage.png)
-
도커 이미지 확인 docker images
-
mysql 태그 이미지 다운 docker pull mysql:5.7
![](https://velog.velcdn.com/images%2Fbongf%2Fpost%2Fc17839b4-c521-4ad5-8744-993ff5316af5%2Fimage.png)
-
docker 포트 포워딩 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name bongf-mysql -v /Users/bongf/java2:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
에서 -p 3306:3306
의 의미
- 호스트의 포트를 도커의 포트와 연결해주기 (MySQL은 3306)
- 자세한 설명
-
docker run -d -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=password --name mysql이름 -v 경로 mysql:5.7
하나 하나에 대한 의미 https://mungto.tistory.com/328 에서 자세히 설명해줌
에러 발생
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
MySQL접속
winpty decker exec -it bongf-mysql bash
로 도커 왔으면 mysql -u root -p
로 sql 들어가기
- u (user의 약자) -u root 하면 루트 사용자
사용자 만들어서 모든 권한 갖기
CREATE USER 'bongf'@'%' IDENTIFIED BY 'password';
- @'%'는 외부 접근이 허용하도록 하는 user
- @’localhost’는 해당 컴퓨터에서만 접근 가능하다는 의미
- @'localhost'로 user생성시 워크벤치에서 접근 안된다
GRANT ALL PRIVILEGES ON *.* TO 'bongf'@'%';
- 생성한 유저에 모든 권한 부여하기 (root계정은 두고 일종의 admin 계정 만드는 것)
*.*
는 모든 권한
flush privileges
환경변수 설정 https://javacan.tistory.com/entry/docker-start-3-port-env-local-storage
특정상황 빠져나가기 ctrl c
utf8 설정.
- etc/mysql/mysql.conf.d가 어딨는지 못찾아서 고생. 이것은 docker 처음 열고 my sql 실행 전에 있다. home 디렉토리에
SQL 문법과 개념은 생활코딩에서
https://bong-f.tistory.com/136
https://www.youtube.com/watch?v=h_XDmyz--0w&feature=emb_logo
https://velog.io/@bongf/codesquad-210128-Learned-database
개념
- 데이터들을 모아 > 표를 만들고 > 그런 표들을 묶어 놓은 것이 데이터베이스(=스키마) > 이 스키마들이 저장된 곳 데이터베이스 서버
- 웹브라우저(웹 클라이언트)와 웹서버가 있듯 데이타베이스 클라이언트와 서버가 있다.
: 클라이언트는 MySQL 모니터 (우리가 명령어로 다루었던) 실제 데이터는 서버에 저장된다
실습
- CREATE DATABASE 데이터베이스이름
: 데이터베이스 생성
- DROP DATABASE 데이터베이스 이름
: 데이터베이스 삭제
- SHOW DATABASE
: 생성된 데이타베이스 보기
- USE 데이터베이스명
: 커서 창 안에는 mysql> 이라고 똑같이 뜨지만 이제 mysql은 내가 내리는 명령을 내가 만든 pratice1이라는 데이터베이스에 처리할 거야
- CREATE TABLE 테이블명{
아이템이름 조건들...,
아이템이름 조건들...,
...
PRIMARY KEY(아이템이름);
- DESC 테이블명 하면 만든 테이블의 구조가 나온다
- INSERT INTO 테이블명(title,descrtiopn 값을 바꿀 column 값) VALUES('hello'각 column 값에 들어갈 진짜 값)
: 데이터 넣기
- SELECT
: SELECT * FROM 테이블명;
: 모든 데이터 가져오기
: SELECT id,title(실제column명) FROM 테이블명;
: 원하는 column 만 가져오기
: SELECT id,title(실제column명) FROM 테이블명 WHERE author='bongf';
- 원하는 column들 가져오는데 조건 달아주기 특정컬럼=값
: SELECT id,title(실제column명) FROM 테이블명 WHERE author='bongf'ORDER BY 컬럼명:
: 원하는 column들 가져오는데 조건 달아주기 + 정렬하기
: SELECT id,title(실제column명) FROM 테이블명 WHERE author='bongf'ORDER BY 컬럼명 DESC
- 원하는 column들 가져오는데 조건 달아주기 + 반대로 정렬하기
: SELECT id,title(실제column명) FROM 테이블명 WHERE author='bongf'ORDER BY 컬럼명 DESC LIMIT 3;
- 원하는 column들 가져오는데 조건 달아주기 + 반대로 정렬하기 한다고 해도 너무 데이터 많아 컴 에러 날 수 있으니 특정 개수 3개만 가져오기
- 데이터베이스 핵심은 SELECT
- UPDATE
: UPDATE 테이블명 SET 컬럼명="바꿀값', 컬럼명2='값'
: 해주면 해당 컬럼들의 값이 일괄적으로 전부 싹 다 바뀜
: UPDATE 테이블명 SET 컬럼명="바꿀값', 컬럼명2='값' WHERE id=2;
: pk 등으로 실제 바꿀 값 지정해주기
- RENAME TABLE 테이블명 TO 새테이블명;
: 테이블 이름 바꾸기
- join
: 여러 테이블을 합쳐 보여줄 수 있다.
: 한 테이블에 다 담기보다 관련 있는데이터들을 묶어주기 그 테이블들끼리 연결해주는 것이 데이터 관리에 용의하다.
: 하지만 그 데이터를 볼 때는 합쳐진 버전으로 보고 싶으니 join 사용
: SELECT * FROM 테이블명1 LEFT JOIN 테이블명2 ON 합치는기준되는 컬럼 = 합치려는 기준되는 컬럼2;
: 근데 저러명 똑같을 값을 가진 두 컬럼이 다 보이니가 SELECT과 FROM 사이에 보고싶은 컬럼명만 써준다. (두 테이블의 커럶 이름이 같은 경우 table.column으로 구분해줌 앞에 테이블명을 붙여서
DDL DQL
Bad
Good
Feeling
- 멋직에서도 제일 헤맸던 강의가 데이터베이스 쪽이었는데 그래도 그 때보단 쉽게 했던 것 같다. 그 때는 안드로메다로 갔었는데 지금은 우리은하에는 온 느낌. (지구까지는 아직 많이 멀었다)
- 요즘 시간이 진짜 빨리간다. 눈뜨면 일주일이 다 가있는 기분