본문 바로가기

database

(6)
[MySQL] SQL_CALC_FOUND_ROWS와 FOUND_ROWS() 게시판 서비스를 만들 때, 페이징 기능은 거의 필수적이라고 볼 수 있습니다.기능을 구현하기 위해서는 전체 페이지 수가 필요합니다.SELECT COUNT(*) FROM post;전체 페이지를 구하는 일반적인 쿼리는 다음처럼 작성할 수 있습니다.하지만, 게시글도 조회해야 하기 때문에 쿼리를 두 번 사용해야 한다는 문제점이 있습니다.이번 글은 이러한 문제점을 개선하기 위한 글입니다.📃 SQL_CALC_FOUND_ROW쿼리에 LIMIT 옵션을 주면 그 수만큼 레코드를 검색하고 종료합니다.하지만 SQL_CALC_FOUND_ROW라는 힌트를 주게 되면,조건에 부합하는 레코드 검색이 끝나더라도 끝까지 검색을 수행합니다.SELECT SQL_CALC_FOUND_ROWS, * FROM post LIMIT 5 OFFSET..
[서점 프로젝트] SQL Error [1701] 해결하기 주문 API가 배송 정보 입력, 주문 상품 입력 등을 하나의 트랜잭션으로 처리하지 않아,중간에 주문이 실패해도 데이터의 일관성이 유지되지 않았습니다.올바른 테스트를 위해 데이터베이스의 데이터를 수동으로 삭제하던 중 다음과 같은 에러를 만났습니다.❗ 원인메시지에서 외래키 제약 조건에서 참조된 테이블을 TRUCATE 할 수 없다고 안내하고 있습니다. ❗ 해결 방법TRUNCATE를 할 때 외래키 제약 조건을 해제하는 방법으로 문제를 해결할 수 있습니다.-- 외래키 비활성화SET FOREING_KEY_CHECKS = 0;-- 삭제 명령TRUNCATE order_item-- 외래키 활성화SET FOREIGN_KEY_CHECKS = 1;반드시 외래키 제약 조건을 다시 활성화하는 것을 잊지 말아야 합니다.비슷한 문제..
[SQL] IN 연산자 알아보기 우리는 조건과 일치하는 행을 보고 싶을 때 WHERE 절을 이용합니다.예를 들어 딸기와 메론이 들어가는 아이스크림을 찾고 있다면 이렇게 쿼리를 보낼 것입니다.SELECT *FROM icecreamWHERE ingredient = '딸기' OR ingredient = '메론';그렇다면 추가로 수박이 들어가는 아이스크림을 찾고 싶다면?계속 OR 절을 붙여 늘려가야 하는 것일까요?👆 IN값을 하나만 지정할 수 있는 = 연산자와 다르게 여러 개의 데이터를 지정할 수 있습니다.위 예시에서 IN 절을 넣어 쿼리를 수정해보겠습니다.SELECT *FROM icecreamWHERE ingredient IN ('딸기', '메론');연산자가 줄어서 쿼리가 간단해지고 이해하기 쉬워졌습니다.이번 글은 짧게 마무리 되었네요.글..
[서점 프로젝트] 서브 쿼리를 이용한 평점 업데이트 사용자는 책을 구매하고 그에 대한 별점을 남길 수 있습니다.별점이 남겨질 때마다 책의 평점은 변화합니다.오늘은 별점의 평균을 구해줄 서브 쿼리에 대해서 이야기해보겠습니다.🐸 서브 쿼리간단하게 설명하자면 쿼리 안에 있는 쿼리를 의미합니다.서브 쿼리는 괄호 안에 넣어서 작성하며메인 쿼리의 컬럼을 사용할 수 있습니다. 🐸 서브 쿼리의 위치서브 쿼리는 다양한 위치에서 사용할 수 있습니다.하지만 FROM 절에서 사용할 때는 AS 예약어를 사용해서 별칭을 주어야 합니다.SELECTFROMWHEREHAVINGORDER BYVALUESUPDATE 🐸 적용 예시책의 평점을 수정하는 쿼리는 간단합니다.UPDATE book SET rating = 평점 WHERE id = 1;이 평점을 우리는 서브 쿼리로 만들 수 있습..
[SQL] JOIN으로 테이블을 합쳐보자 지난번 포스트에서 정규화를 알아보았습니다.종속 관계인 속성을 제거하였지만, 테이블을 다시 합쳐 사용할 때가 생깁니다.예를 들어서 한 유저가 작성한 댓글들을 모아서 확인할 때,우리는 유저 테이블과 댓글 테이블을 조합해야 합니다.🍡 테이블을 하나로 연결하는 JOINJOIN은 SQL을 사용하면 빼놓을 수 없는 키워드입니다.사전적인 정의는 연결하다, 잇다 등으로데이터베이스에서는 두 개 이상의 테이블을 결합하는 데 사용합니다./* JOIN 예시 */SELECT * FROM `user`JOIN `comment`ON `user`.id = `comment`.user_id;  이제부터 다양한 유형의 JOIN에 대해서 알아보겠습니다. 💡 (INNER) JOININNER JOIN은 두 테이블을 비교하여 일치하는 부분만 ..
[SQL] Time Zone 설정하기 진행하고 있는 미니 프로젝트에서 데이터베이스로부터 읽어온 시간이 다르게 표기되었습니다.데이터베이스에서 제공하는 날짜 타입은 무척 편리하다고만 생각했는데,해결하지 않으면 의도와 다른 동작을 하는 서비스가 될 가능성이 높습니다.어떻게 해결하면 좋을지 미리 작성해두어서 추후에 생길 문제를 예방하고자 합니다.⏳ MariaDB 시간대MariaDB는 다양한 시간대 설정을 가지고 있습니다.SELECT @@global.time_zone, @@session.time_zone, @@system_time_zone;@@global.time_zone@@session.time_zone@@system_time_zoneSYSTEMSYSTEMUTCglobal.time_zone: 현재 서버에서 사용하는 시간대입니다.session.tim..