본문 바로가기

반응형

TOOL/MySQL

(23)
MySQL - SQL의 like 의 검색 속도를 빠르게 하는 fulltext 설정 fulltext 데이터에서 SQL의 like를 사용하여 문자열을 찾는경우 데이터가 적다면 상관없지만 데이터가 10만개 1000만개 이런식으로 늘어나게 된다면 full scan 즉, 모든 데이터를 순서대로 찾아 처리하는데 데이터가 늘어날수록 점점 많은 시간이 소요될 수 밖에 없다. 그에 따른 해결책으로 우리는 fulltext설정을 알아야 할 필요가 있다. MySQL문서를 보면 이 fulltext는 단어별로 트리를 미리 구성해놓아 검색엔진처럼 빠른 검색을 제공한다고 나와있다. 따라서 자연어 검색처리를 위한 fulltext를 사용해야한다. fulltext 설정방법 설정방법은 간단하다 내가 찾고자하는 문자열 컬럼의 indexes 창에서 해당 컬럼의 타입을 fulltext로 설정해주면 된다. 이에 따라 필요한 문..
MySQL - Error Code : 1062. Duplicate entry 해결방법 Erro Code : 1062 Error Code : 1062. Duplicate entry가 나오는 이유에 대해서 알아보자 데이터를 insert 하려 할 때, 1062 에러 때문에 당황한 적이 한번쯤은 있을 것이다. Error Code : 1062는 테이블 생성시 indexes 설정에서 unique 설정이 되어있는 경우에 중복된 값을 insert 할 수 없다는 에러이다. 이에 대한 대처 방법으로는 2가지 경우에 따라 조금씩 다르다. 1. 중복된 데이터를 받으면 안되는 테이블이라서 unique 설정이 되어있는 경우 이와같은 경우는 create table창에서 UQ에 체크표시가 되어있기 때문인데 UQ에 체크표시 상세 설정은 indexes에서 할 수 있다 . 이럴때의 해결방법은 추가하려는 데이터의 중복된, ..
MySQL - 테이블의 unique 설정하는 방법 테이블의 unique 설정하는 방법 user 테이블에 id, email, password, name, gender 라는 컬럼을 생성하려한다. 위와 이미지와 같이 생성할 경우, 특별히 잘못된 점은 없어보이지만 email을 주목해 보아야 한다. 이유는, email은 중복이 없는 unique한 값이어야 하기 때문이다. email이 중복된다면 같은 데이터가 2개 3개씩 쌓이게 되는 것이므로 의도하여 중복하지 않는이상 잘못된 중복이라 할 수 있다. 그렇기에 우리는 한가지 조치를 취해야 한다. 인덱스에서 우리는 email 컬럼을 unique하게 처리할 수 있도록 설정해야 한다. 방법은 아래와 같다. 1. 설정하고자 하는 Index Name 과 Type설정 2. Index Columns에서 설정할 Column 체크 ..
MySQL - is null( ), is not null( ) is null( ) null인 데이터만 사용하고 싶을때 쓰는 함수 select * from series s left join reviews r on s.id = r.series_id where r.rating is null; 회원가입은 했지만, 사진은 한번도 올리지 않는 유저들의 데이터를 가져오기 (null인 데이터만 가져오기) select u.username from users u left join photos p on u.id = p.user_id where p.image_url is null; is not null null이 아닌 데이터만 사용하고 싶을때 쓰는 함수 select * from users u left join photos p on u.id = p.user_id where p.image_..
MySQL - ifnull( ) ifnull null이라고 되어있는 값을 다른 값으로 변경하는 함수. pandas의 fillna( )와 같음 select *, ifnull( age, 100 ) from people; select rv.first_name, rv.last_name, count(r.rating) as COUNT, ifnull(min(r.rating) , 0) as MIN, ifnull(max(r.rating) , 0) as MAX, ifnull(avg(r.rating) , 0) as AVG, if( count(r.rating) = 0, 'INACTIVE', 'ACTIVE' ) as STATUS from reviewers rv left join reviews r on rv.id = r.reviewer_id group by r..
MySQL - group by의 having 사용 방법 having group by의 조건문에는 where가 아닌 having을 쓰는 것이다. 각 고객별로 주문 금액 평균이 300달러 이상인 데이터만 가져오시오 select c.first_name, c.last_name, avg(o.amount) as AVG from customers c join orders o on c.id = o.customer_id group by c.id having avg(o.amount) >= 300 ; 각 고객별로 주문 금액 최대값이 600달러 이상인 데이터만 가져와서 내림차순으로 정렬하시오 select c.first_name, c.last_name, max(o.amount) as MAX from customers c join orders o on c.id = o.customer..
MySQL - Join과 left join 하는 방법과 예시 join 여러개의 테이블을 합쳐서 가져올때 사용 select * from customer; select * from order; on은 연결고리가 되어줄 컬럼을 적어준다. 즉, Foreign Key로 설정한 컬럼을 작성한다. select * from customers join orders on customers.id = orders.customer_id; 테이블 이름을 줄여서 사용하는 방법 from 뒤 테이블명, join 뒤 테이블명 뒤에 약자를 설정할 수 있다. select * from customers c join orders o on c.id = o.customer_id ; 컬럼의 이름이 중복되는 경우는, 컬럼 이름을 바꿔서 가져와야 한다. select c.id as customer_id , c.f..
MySQL - 여러 테이블 생성 시 foreign key 설정하는 방법 두개의 테이블을 합쳐서 작업하기 두개의 테이블을 합친 후 DB에서 작업을 하려면, Foreign Key 설정을 해 주어야 한다. 위 이미지 처럼 두개의 테이블을 순서대로 정렬할때 필요한 key가 필요한데 데이터가 다른 두개의 테이블을 순서대로 유니크하게 기준을 잡아 정렬할 수 있게 하는 것이 foreign Key 이다. 우선 customers 테이블을 만들어보자. 두번째로 합쳐서 작업할 order라는 테이블을 만들것이다. 위 이미지에서 봐야할 2가지 포인트가 있다. 첫번째, DECIMAL(8,2) DECIMAL( M , D ) M은 소수 부분을 포함한 실수의 총 자릿수를 나타내며, D는 소수 부분의 자릿수를 나타내며, D가 0이면 소수 부분을 가지지 않는다. 두번째, UN customer_id또한 for..

반응형