Database/mysql: 50개의 글
root 계정 로그인mysql -u root -pMySQL 사용자(user) 조회MySQL의 사용자 목록을 조회하기 위해 MySQL의 기본 스키마인 mysql안에 user 테이블에서 아래와 같은 명령어를 통해 조회할 수 있다.use mysql;select user, host from user; # 사용자 목록 조회사용자 생성사용자 생성시에는 create 명령어를 사용해서 사용자를 추가할 수 있다. 내부 접근만 가능하도록 만들기 위해 host에 localhost를 넣어줬다.create user '사용자'@'host' identified by '비밀번호';# ex) 내부 접근을 허용하는 사용자 추가create user 'test'@'localhost' identified by '0000';사용자에 권한 부여..
이번에 정리할 내용은 MySQL 기준으로 페이징 처리를 할 때 사용하는 키워드인 ORDERS, LIMIT, OFFSET 입니다. 구현을 해 본 경험이 거의 없어서 좀 낯설었네요. 따라서 이번에 확실히 정리하도록 하겠습니다 !! ✔ MySQL - 페이징 처리(orders, limit, offset) 쿼리문을 통해 페이징 처리를 해볼건데요, 예제와 쿼리문을 통해 어떻게 작성하는지 알아보겠습니다. LIMIT과 OFFSET의 의미는 다음과 같습니다. • LIMIT: 행을 얼마나 가져올지 • OFFSET: 어디서 부터 가져올지 SELECT * FROM 테이블명 ORDERS LIMIT 숫자; 위 쿼리는 숫자 만큼의 행을 출력합니다. • SELECT * FROM USER orders LIMIT 10; • SELECT..
하지만 해당 글의 예제에서는 transaction의 isolation level을 동일하게 설정하고 설명을 진행했습니다. '그렇다면 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?' 라는 의문이 들었고 이번 글에서는 이를 실험해 본 결과를 정리하려고 합니다. 참고로, 이번에는 MySQL이 아닌, MSSQL을 이용하여 예제를 진행하였습니다. 처음에는 같은 isolation level(READ COMMITTED)의 두 transaction이 어떻게 동작하는지 먼저 살펴보겠습니다. #write transaction BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED INSERT INTO "dbo"."isolation_..
이번 글에서는 MySQL의 Delimiter 명령어에 대해 다뤄보겠습니다. 최근 Procedure를 정의하면서 다음과 같은 SQL문을 사용하였습니다. mysql> DELIMITER $$ mysql> CREATE PROCEDURE insert_test() -> BEGIN -> DECLARE i INT; -> SET i = 0; -> WHILE i INSERT INTO account(createDatetime) VALUES(now()); -> SET i = i + 1; -> END WHILE; -> END $$ mysql> DELIMITER ; 맨 처음과 끝에 Delimiter 명령어를 사용하였습니다. 본 글은 Delimiter에 관한 글이기 때문에 Procedure와 다른 명령어..
Transaction이란? Transaction이란 데이터베이스에서 실행하는 작업의 단위를 의미합니다. 이번 글에서는 송금하는 과정을 예제로 전체적인 개념들을 설명하고자 합니다. 또한 테스트를 위해 MySQL(InnoDB)을 활용하였습니다. 예제는 다음과 같습니다. A라는 사람이 B라는 사람에게 송금을 하면, 아래와 같은 과정으로 이루어 진다고 가정하겠습니다. A 계좌에서 출금 B 계좌에 위에서 차감된 금액만큼 입금 송금은 2 단계로 나누어지지만 크게는 하나의 transaction(작업)이라고 할 수 있습니다. 하지만 데이터베이스 관련된 모든 작업을 transaction이라고 하지는 않습니다. Transaction은 다음과 같은 특징(ACID)을 가져야합니다. Atomic Atomic이란 '원자의'란 의..
TINYINT[(M)] [UNSIGNED] [ZEROFILL]- 범위 : -128 에서 127 (UNSIGNED 일 경우 0 에 255) SMALLINT[(M)] [UNSIGNED] [ZEROFILL]- 범위 : -32768 에서 32767 (UNSIGNED 일 경우 0 에 65535) MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]- 범위 : -8388608 에서 8388607 (UNSIGNED 일 경우 0 에 16777215) INT[(M)] [UNSIGNED] [ZEROFILL]- 범위 : -2147483648 에서 2147483647 (UNSIGNED 일 경우 0 에 4294967295)- 주의 : 모든 연산은 "signed BIGINT" 로 이루어진다. 따라서 더하기 곱하기 등..
TypeBytesMinimum ValueMaximum Value (Signed/Unsigned)(Signed/Unsigned)TINYINT1-128127 0255SMALLINT2-3276832767 065535MEDIUMINT3-83886088388607 016777215INT4-21474836482147483647 04294967295BIGINT8-92233720368547758089223372036854775807 018446744073709551615
MySQL 서버에서 다른 MySQL 서버로 전체 데이터베이스 중에 테이블 한개 도는 여러개를 복사하는 방법에 대해 기술해보겠습니다. 그 중 MySQL Workbench의 Migration Wizard 기능을 이용해서 서버간 데이터를 복사하는 방법입니다. MySQL Workbench의 Migration Wizard 기능을 이용하여 MySQL 서버간에 데이터를 복사하는 방법 혹은 MySQL Workbench의 Data Export와 Data Import(또는 커맨드라인에서 Data Export와 Data Import)를 사용하는 방법도 있습니다. 후자의 경우가 더 일반적입니다. 물론 속도의 차이가 있지만 편리함으로 다지자면 MySQL Workbench의 Migration Wizard 기능을 이용하는 것이 많..
서버를 운영하면서 로그 파일의 의미는 아주 중요합니다. 문제가 발생했을 때, 그 원인 파악을 조금 더 쉽게 하도록 하여 해결 시간을 단축할 수 있도록 도와줍니다. 아래 내용은 MySQL 운영시 로그 정보를 저장하는 방법입니다. 1. 기본 로그 설정 - 리눅스 [mysqld] # 에러 로그 설정log-error=/로그저장경로/error.log # 쿼리 로그 설정log=/로그저장경로/query.log # 바이너리 로그 설정log-bin=mysql-bin # 슬로우 쿼리(slow query) 로그 설정log-slow-queries=/로그저장경로/mysql-slow.loglong_query_time=5 # UPDATE 쿼리 설정log-update=update_logs 2. 쿼리 로그 리눅스 환경에서는 my.cn..
지금까지 MySQL에서 쿼리를 처리하는 방식이나 실행 계획에 대해 살펴보겠습니다. 쿼리의 실행 계획만으로도 상당히 내용이 많아서 모두 기억하자면 상당히 힘들 것입니다. 그래서 여기서는 쿼리의 실행 계획을 확인할 때 각 칼럼에 표시되는 값 중에서 특별히 주의해서 확인해야 하는 항목만 간략하게 정리했습니다. Select_type 칼럼의 주의 대상 DERIVEDDERIVED는 FROM 절에 사용된 서브 쿼리로부터 발생한 임시 테이블을 의미합니다. 임시 테이블은 메모리에 저장될 수도 있고 디스크에 저장될 수도 있습니다. 일반적으로 메모리에 저장하는 경우에는 크게 성능에 영향을 미치지 않지만, 데이터의 크기가 커서 임시 테이블을 디스크에 저장하면 성능이 떨어집니다. UNCACHEABLE SUBQUERY쿼리의 FR..