트랜잭션 테이블의 내용을 변경하는 SQL들이 연달아 실행되며 이것들이 마치 하나의 SQL처럼 모두 성공하거나, 하나라도 실패하면 모두 실패하는 등의 동작이 필요하면 트랜잭션을 사용해야 한다. 원자성을 만족하는 것을 말한다. DDL이나 DML중 INSERT/UPDATE/DELETE에 의미가 있다. SELECT는 조회만 하기 때문에 트랜잭션을 사용할 이유가 없다. BEGIN과 END, BEGIN과 COMMIT 사이에 해당 SQL들을 사용한다. ROLLBACK을 통해 트랜잭션 실행중 에러가 발생하면 트랜잭션 시작 전 상태로 되돌린다. 예시 계좌 이체 : A가 B에게 송금한다. 계좌 이체는 출금만 성공하고 입금이 실패하면 안 된다. 두 개의 트랜잭션이 하나처럼 동작을 해야 한다. -> Atomic하다. 조회만 ..
JOIN SQL 조인은 두 개 이상의 테이블들을 공통필드를 이용하여 통합한다. 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용한다. JOIN의 결과로 양쪽의 필드를 모두 가진 새로운 테이블이 만들어진다. 조인 방식에 따른 차이점 어떤 레코드들이 선택되는가 어떤 필드들이 채워지는가 JOIN 종류 INNER JOIN 양쪽 테이블에서 매치가 되는 레코드들만 리턴한다. 양쪽 테이블의 필드가 모두 채워진 상태로 리턴된다. SELECT * FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2 LEFT OUTER JOIN 왼쪽 테이블의 모든 레코드들을 리턴한다. 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다. 매칭이 되지 않는 값들은 NUL..
MySQL에서 지원하는 타입 더보기 Numeric Type INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT - 정수형 DECIMAL, NUMERIC - 실수형(돈 관련) FLOAT, DOUBLE, BIT - 실수형 Date and Time Type DATE, DATETIME, TIMESTAMP, TIME, YEAR String Type CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET JSON Type 다양한 JSON 조작 함수를 제공한다. Spatial Type 위도와 경도를 중심으로한 위치 관련 타입 INSERT INSERT INTO 테이블이름(컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);..
SELECT 테이블들에서 레코드들을 읽어오는데 사용한다. SELECT 필드이름1, 필드이름2, ... FROM 테이블이름 WHERE 선택조건 -- 조건 검색 GROUP BY 필드이름1, 필드이름2, ... -- 그룹화 ORDER BY 필드이름 [ASC|DESC] -- 정렬 LIMIT N; -- 앞에서 N개 로우만 출력 *을 통해 모든 필드를 지칭할 수 있다. (SELECT * FROM ....) 옵션 DISTINCT - 중복되는 값들을 지울 수 있다. 그룹함수 - GROUP BY를 사용하면 그룹함수를 쓸 수 있다(COUNT, SUM 등) CASE WHEN 필드 값의 변환을 위해 사용할 수 있다. SELECT channel_id, CASE WHEN channel_id in (1,5,6) THEN 'Soci..
세션 정보 컬럼명 타입 설명 예시 id int 세션 ID 101 user_id int 사용자 ID 201 created timestamp 세션 생성 시간 2021-08-11 23:40:02 channel varchar(64) 채널 (접점) 이름 Facebook 위 테이블을 스타스키마 형태로 바꿔본다. 세션 테이블 컬럼 타입 id (pk) int (auto-generated) user_id int created timestamp (auto-generated) channel_id (fk) int 채널 테이블 컬럼 타입 id (pk) int channel varchar(32) CREATE TABLE session ( id int not null auto_increment primary key, user_id ..
Primary Key 테이블에서 레코드의 유일성을 정의하는 필드이다. (ex. 학번, 주민등록번호) Composite Primary Key : 두 개 이상의 필드로 정의된 Primary Key이다. 유니크 제약조건을 가진다. (테이블에서 pk가 중복된 값을 가진 로우가 없다.) Foreign Key sql을 실행할 때 힌트로 작용하여 최적화를 더 잘 할 수 있다. 데이터 정합성 측면에서 FK를 지정하면, 연결된 테이블의 PK값에 있는 값임을 보장한다. Not Null 필드의 값이 항상 존재하는 경우 지정한다. not null이 지정되지 않으면 기본적으로 값은 null을 가질 수 있다. Default Value 필드에 값이 주어지지 않은 경우 기본값을 정의한다. timestamp 타입 : CURRENT_T..
웹 서비스 사용자/세션 정보 사용자 ID : 보통 웹서비스에서는 등록된 사용자마다 부여하는 유일한 ID이다. 세션 ID : 세션마다 부여되는 ID이다. 세션 : 사용자의 방문을 논리적인 단위로 나눈 것이다. 과거에는 사용자가 로그인 후 로그아웃 하거나, 또는 로그인 세션 정보가 만료되면서 로그아웃 될 때까지를 하나의 세션으로 보기도 했다. 이 방식의 문제점이 생기면서 요즘은 구글 애널리틱스에서 쓰는 세션 정의가 있는데, 그것을 따라 한다. 사용자가 30분이상 쉬지 않고 서비스를 이용하더라도, 사용자가 외부 링크(보통 광고)를 타고 다시 서비스를 방문하면 새로운 세션을 연다. 광고등은 마케팅과도 연관되어 있어서, 다른 의도를 갖고 있다고 보고 새로운 세션을 연다. 사용자가 방문 후 30분간 interact..
Docker MySQL을 다른 OS에서 설치하려면 다양한 변수들이 존재한다. OS 버전, 기존 설치되어 있는 프로그램들과의 의존성 등 보통 소프트웨어를 설치하면 다양한 다른 소프트웨어들의 설치가 동반된다. Docker는 특정 프로그램, 그 프로그램을 실행하는데 필요한 기타 소프트웨어들을 하나의 패키지로 만든다. 패키지를 사용하여 프로그램의 개발과 사용을 도와준다. 패키지를 파일 시스템 형태로 만드는데, 도커 이미지라고 한다. 이 이미지는 공유가 가능하다. 도커 이미지 공유소를 Docker Registry(Docker Hub)라고 부른다. 도커 이미지를 실행시킨 것을 도커 컨테이너라고 부르며, 응용프로그램에 해당한다. 도커는 호스트 운영체제 위에서 작동한다. 따라서 도커 위에서 작동하는 소프트웨어들은 운영..