본문 바로가기

mysql

(9)
MySQL 테이블 삭제하기 (DROP TABLE) MySQL 에서 테이블을 삭제하기 위해서는 DROP TABLE 구문을 사용한다. DROP TABLE [테이블명] 만약 테이블이 없다면 1051 에러가 발생할 수 있기 때문에 if exists 구문을 추가한다. DROP TABLE if exists [테이블명] 만약 마스터-슬레이브 DB 구조에서, 마스터 DB 에만 존재하는 테이블에 drop table 쿼리를 호출하면 슬레이브 DB에서 에러가 발생한다. 따라서, if exists 구문을 필수로 사용해줘야한다. mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event ..
MySQL 5.7 doens't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 현재 mysql 5.7.26 버전 사용중. SELECT VERSION(); 위의 버전에서는 LIMIT 이 포함된 서브쿼리를 지원하지 않는 것으로 확인하였다. SELECT * FROM `test_table` WHERE `number` IN (SELECT DISTINCT `number` FROM test_table LIMIT 5); 위와 같이 LIMIT 이 포함된 서브쿼리가 있는 쿼리를 실행시키면 아래와 같이 에러가 발생한다. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 이 때, 위의 쿼리를 직접 사용할 수는 없지만 임시테이블을 사용하여 쿼리를 사용할 수 있다. SELECT `number` FROM `test_tab..
MySQL Query 추적 1. MySQL root 로그인 2. general_log(query log) 확인 show variables like 'general%'; general_log 의 value 가 OFF 상태면, 로그 기록이 꺼져 있는 상태인것이다. general log를 ON 상태로 활성화 시키면, MySQL이 쿼리 요청 받는 즉시 general log에 기록한다. 3. general log 상태를 ON으로 바꾼다. set global general_log=on; 2번에서 show variables like 'general%' 를 했을 때, general_log_file 의 value에 해당하는 경로에 로그가 작성된다. 재시작할 필요없이 바로 적용되니 확인 가능.
[MySQL] Replication(복제) 레플리케이션 이란? Replication은 단어 그대로 복제를 의미 하나의 마스터 DB에서 하나 이상의 슬레이브 DB로 데이터를 비동기적으로 복제하는 기능. -> 읽기 부하 분산 또는 고가용성이 목적 레플리케이션의 목적 스케일-아웃(Scale-out)을 위한 솔루션 마스터 DB : DML(INSERT, UPDATE, DELETE ... ) 쿼리 전용으로 사용 슬레이브 DB : 읽기(SELECT) 쿼리 전용 데이터의 안정성 보장 마스터 DB에 영향을 주지않고, 슬레이브 DB로 레플리케이션 시킨다. 데이터 분석 슬레이브 DB에 레플리케이션된 실시간 데이터로 분석 작업 가능 레플리케이션 설정 - 마스터 DB 마스터 DB에서 my.cnf 파일을 확인한다. log-bin이 활성화 되어 있어야한다. mysql-bi..
[MySQL] 타입 변환 함수 - 문자를 숫자로 CAST sql 쿼리를 사용하다보면 1. 문자를 숫자로 변환하거나 2. 숫자를 문자로 변환하는 과정이 필요할 때가 있다. 이 때 사용하는 함수가 CAST 함수이고, SELECT CAST('12345' as int(5)); SELECT CAST(12345 as CHAR(5)); 위와 같이 사용가능하다. cast 에 사용할 수 있는 type은 binary, char, signed, date, datetime, time, unsigned 등이 있으니 참고하면 된다. 그리고 varchar의 경우에는 사용이 불가하니, char로 대체해서 사용한다.
[MySQL] MySQL 파티션 개요 파티션이란, MySQL 서버의 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만, 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션이다. 테이블의 데이터가 많아진다고 해서 무조건 파티션을 적용하는 것이 효율적인 것은 아니다. 하나의 테이블이 너무 커서, 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적 예이다. 파이션 처리 과정을 보기 위해, 간단한 테이블을 생성한다. CREATE TABLE tb_article ( article_id INT NOT NULL, reg_date DATETIME NOT NULL, ... PRIMARY KEY(article_id) ) -- reg_date 에서 연도..
[MySQL] 사용자 정의 변수 선언 방법 쿼리문을 짜다보면, 임의 변수 선언이 필요한 경우가 있다. set @var := 'Hello' set @var1 = 'Hello', @var2 = 'Hi' 변수 값을 할당하는 SET 문장은 "=" 또는 ":=" 를 사용하여 선언할 수 있다. SET @temp_num := 1; SELECT (@temp_num := @temp_num + 1); 커넥션에서 정의된 사용자 변수는 SQL 문장에서 그 값을 참조해서 다른 연산을 수행할 수도 있다. 위와 같은 연산을 사용할 때, 주의해야할 점은, 매뉴얼에, "절대 동일 SQL 문장에서 변수에 값을 할당하고 동시에 값을 참조하지 말라"는 주의사항이 있다. 일반적으로 사용자가 기대하는 작동 결과를 보여주지만, 이 결과는 MySQL에서 보증하지 않는 결과이다. 따라서, ..
[MySQL] SELECT 결과를 INSERT 하기 여러행을 한번에 인서트 할 때, 혹은, 테이블에서 셀렉트한 값을 다른 테이블에 인서트 하는 경우에 사용할 수 있다. INSERT INTO [테이블명1] (COLUMN1,COLUMN2,COLUMN3,COLUMN4) SELECT RESULT1,RESULT2,RESULT3,RESULT4 FROM [테이블명2] WHERE RESULT1 > 0; INSERT INTO의 컬럼 개수와 아래 SELECT 문의 컬럼 개수 및 타입 통일은 필수 SELECT 구문에 여러 테이블을 JOIN해서 사용할 수도 있기 때문에 아주 편리하게 사용 가능하다.