쿼리를 만들다 보면 데이터가 들어 올 때 유니크 값이 중복이면 나머지 컬럼을 업데이트하고 싶은 경우가 있다 물론 일일이 업데이트해도 되지만 데이터 여러 개를 하고 싶을 때 유용한 옵션이 있다 그건 바로 아래 insert의 옵션이다 ON DUPLICATE KEY UPDATE 간단하게 예시를 들자면 다음과 같은 DDL이 있다고 치자 CREATE TABLE books ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) UNIQUE, description TEXT, author VARCHAR(255) ); 그리고 여기에 데이터를 넣자 여기도 해당 옵션을 넣었지만 바뀐 건 없고 5개의 칼럼이 추가된다 INSERT INTO books (name, description,..
MySQL
최근에 본 면접에서 질문으로 MySQL 실행계획을 물어보는 분이 계셨는데감기 이슈로 멍해진 머리로는 제대로 된 답을 하지 못했었다. 이 참에 제대로 정리해 보자. 정의DB + Query Plan을 들을 경우 딱 느낌이 오는 건"아 DB에서 쿼리를 분석해서 사용하는 과정에 대한 계획인가"로 추론해 볼 순 있는 데 대충 그게 맞습니다. 이게 왜 필요하나면우리가 TABLE에 쿼리를 아래처럼 날렸을 때SELECT LoanedBook.*FROM LoanedBookJOIN Person ON LoanedBook.person_id = Person.person_idWHERE Person.person_id = 1;주어진 쿼리가 같더라도 LoanedBook에 어디에 Index가 있는지 또는 Person에 Unique 값이 ..
1. 뷰란 MySQL 버전 5 이상부터 가능한 특정 명령문에 매칭된 가상 테이블입니다. SELECT, WEHRE, Sub Query, UNION, JOIN 등 다양한 결합과 조건으로 만들어진 데이터를 뷰를 통해 가상 테이블을 만들어 편리하고 빠르게 데이터를 액세스 할 수 있습니다. 특징 - 실제로 데이터를 저장하지 않고 오직 보여주는데 중점을 둔 기능입니다. - 뷰의 기반 테이블의 데이터를 수정할 경우 뷰에도 반영됩니다. - 뷰의 데이터를 수정할 경우 실제 데이터도 같이 바뀝니다. - 뷰로 생성된 가상 테이블에도 데이터를 삽입할 수 있습니다, 하지만 JOIN, UNION, Sub Query 등으로 만들어진 뷰에서는 데이터를 삽입할 수 없습니다, 하지만 그 외 뷰에서는 UPDATE 및 INSERT가 가능합..
1. 함수란 함수의 기본적인 개념은 사람이 숨 쉬는 것에 대해 갈비뼈와 횡격막의 상하 운동에 의해 흉강의 부피가 증가하면서 폐의 부피가 증가함으로 인해 폐 속의 공기압이 대기압보다 낮아지게 되어 공기가 들어오게 된다는 것을 생각하고 숨 쉬지 않는 것처럼 나는 숨을 쉰다고 생각하면 몸이 알아서 움직여주는 것과 같이 함수도 함수를 사용하는 것으로 그 속의 수많은 문장들을 불러오는 것입니다. 부르면 특정 동작을 해주거나 결과값을 주는 것입니다. 보편적인 프로그래밍 언어면은 대부분 존재하는데 MySQL도 함수를 선언할 수 있습니다. 2. 사용법 기본적인 형태는 아래와 같습니다. CREATE FUNCTION 함수명(매개변수 자료형) RETURNS 반환_자료형 BEGIN SQL 쿼리문 1; SQL 쿼리문 2; RE..
1. 트랜잭션이란 MySQL에서 트랜잭션은 데이터베이스를 상태를 바꾸는 일종의 작업 단위입니다. 우리가 MySQL의 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있습니다. INSERT, DELETE, UPDATE 등의 SQL 명령문을 통해 데이터를 상태를 바꿀 때마다 자동적으로 Commit을 실행하여 변경된 내역을 데이터베이스의 반영하는 것이죠. (git의 Commit과 유사하다고 볼 수 있습니다.) 즉 여태까지 입력한 명령어들은 MySQL에서 자동 Commit을 통해 쿼리 입력과 동시에 처리하여 데이터베이스에 반영되게 한 것입니다. 그렇다면 Commit을 수동으로 바꿔서 한 트랜잭션 안에 여러 개의 명령문을 넣게 바꿀 수 있을 것입니다. 이것이 2번에서 설명할 트랜잭션의 사용법이라 이해하..
1. 트리거란 트리거의 뜻은 다음과 같습니다. 위 뜻 들의 공통점은 특정한 원인이 있으면 특정한 결과를 만들어낸다는 것 (총은 위협할 대상이 있으면 방아쇠를 당긴다, 도화선은 불을 붙이면 터진다, 촉발시키다는 어떤 자극 주어 어떤 결과를 만든다) MySQL에서의 Tirrger 동작 또한 다르지 않습니다, 특정 동작(원인)이 있으면 특정 결과를 만들어냅니다. 하나의 SQL 동작을 함과 동시에 그에 맞춰 또 다른 동작을 처리하는 장치라고 할 수 있습니다. 주로 INSERT, UPDATE, DELETE 동작에 쓰입니다. 2. 사용법 트리거 선언 CREATE TRIGGER 트리거명 BEFORE/AFTER 명령 키워드 ON 테이블명 FOR EACH ROW BEGIN 처리할 내용 END 여기서 BEFORE/AFTE..
1. 프로시저란 MySQL에서 함수를 정의하는 것이라고 보시면 편합니다, 함수처럼 매개변수를 받고 그에 따라 다른 결과를 나타내는 것이 가능합니다, 프로시저는 SQL 명령의 묶음이라고 볼 수 있고 프로시저로 묶인 SQL문 질의들은 처리될 때 하나의 쿼리로 해석되어 처리합니다. 즉 프로시저는 복수의 쿼리를 실행하는데 있어서 중간 쿼리들의 오류를 방지하기 위해 일괄 처리하는 명령어입니다. 부연 설명으로 프로시저는 MySQL에서 절차적인 처리를 위해 만든 Storead Procedure에 포함되는 기능입니다. Storead Procedure 에서는 DB에서 사용할 수 없던 제어문이 사용이 가능합니다, 이에 포함되는 것은 프로시저 말고도 함수, 트리거 등이 있습니다. 특징 - 하나의 쿼리로 해석하여 처리하기에 ..