목록Database/MySQL (27)
YS's develop story
⌛ Problem Insert문을 활용하여 테이블에 1000개가 넘는 데이터를 넣으려면 어떻게 해야 할까요? Insert문을 1000번 실행하는 건 매우 비효율적으로 보입니다. 📜 Solution Procedure을 활용하면 같은 쿼리문을 반복적으로 실행할 수 있습니다. Person이라는 테이블에 아래와 같이 sql문을 활용하여 데이터를 반복적으로 넣을 수 있습니다. CREATE PROCEDURE loopInsert() BEGIN DECLARE i INT DEFAULT 1; WHILE i
🥝 MySQL 시간 차이 계산하기 (TIMESTAMPDIFF 함수) ⌛ Problem 쿼리를 작성하다 보면 시간 차이를 활용해야 하는 경우가 존재합니다. 예를 들어 예약시간 30분 전에는 예약을 불가능하도록 막아야 한다거나 특정 이벤트일이 현재부터 얼마나 남았는지 등등의 경우가 존재할 것입니다. 이런 경우에는 어떻게 쿼리를 작성해야 할까요? 😕 📜 Solution TIMESTAMPDIFF라는 함수를 활용하면 매우 쉽게 시간 차이를 계산할 수 있습니다. SELECT TIMESTAMPDIFF(HOUR,'2021-08-22 11:00','2021-08-22 14:00') AS dayCount; SELECT TIMESTAMPDIFF(시간 단위, '날짜 1', '날짜 2') AS 이름; 위와 같은 쿼리를 통해서 ..
🥝 MySQL 여러 개의 데이터 한 번에 저장하기 (Node js, mysql2 promise) ⌛ Problem 😕 변경 전 코드 const connection = await pool.getConnection(async (conn) => conn); ........... for (i in reviewImg) { let postReviewImgParams = [ getReviewIdx[0].reviewIdx, reviewImg[i] ] await hospitalDao.postReviewImg(connection, postReviewImgParams); } async function postReviewImg(connection, postReviewImgParams) { const postReviewImgQ..
👨💻 최근에 추가된 값의 인덱스 찾기, LAST_INSERT_ID() 함수 활용 ⌛ Problem 데이터가 추가될 때마다 각 튜플들을 구분할 수 있게 저장하기 위해 테이블을 설계할 때 테이블의 PK를 Auto_Increment로 설정하는 경우는 매우 많습니다. 아래와 같은 쿼리를 통해 Reviews라는 테이블에 리뷰를 등록한다고 가정해 봅시다. INSERT INTO Reviews(hospitalIdx, userIdx, review, reviewScore) VALUES (?,?,?,?); 이 상황에서 특정 사용자가 등록한 리뷰를 수정하기 위해서는 Reviews테이블에서 사용자가 작성한 리뷰가 몇 번째 튜플인지 알아야 하기 때문에 리뷰 테이블의 PK를 알아야 합니다. 그렇다면 아래와 같은 쿼리를 통해 리뷰..
요일을 구하는 함수 WEEKDAY 위와 같이 User 테이블에 유저가 가입한 시간이 timestamp 형식으로 createdAt이라는 컬럼에 저장되어 있습니다. SELECT CASE WEEKDAY(createdAt) WHEN '0' THEN '월' WHEN '1' THEN '화' WHEN '2' THEN '수' WHEN '3' THEN '목' WHEN '4' THEN '금' WHEN '5' THEN '토' WHEN '6' THEN '일' END AS makeDay FROM Users; 이 정보를 통해 WEEKDAY 함수를 활용하여 위와 같이 날짜를 계산할 수 있습니다. 실행 결과 입니다. 이 데이터는 수요일에 생성되었음을 알 수 있습니다.
Foreign key를 설정하려고 테이블을 수정하려고 할 때 발생한 MySQL 1822 에러입니다. 이는 Foreign key 제약조건을 만족하지 않았을 때 발생하는 에러입니다. Stack overflow에 같은 문제가 있어서 기록을 해두고자 했습니다. MySQL Error 1822: Failed to add foreign key constraint; missing index for contraint BUT index exists I am trying to add an foreign key to my flightschedule table but it fails, but I do not really know why. The foreign key should reference the txtAC_tag att..
MySQL 중복된 결과를 제거하는 distinct 아래와 같이 Community라는 테이블에 내가 작성한 글들의 책이름과 책 인덱스를 출력하도록 쿼리를 짰습니다. 하지만 문제점이 있습니다. 14번 인덱스에 해당하는 '부의 추월차선'에 관련된 글을 두 개 작성했기 때문에 중복된 출력 결과가 나오게 됩니다. select Community.bookIdx,bookName from Book left outer join Community on Community.bookIdx = Book.bookIdx where userIdx = ? and Community.status = 1 and Book.status =1; distinct를 사용하면 이러한 중복된 결과를 제거하고 출력할 수 있습니다. select distinc..
MySQL ) LIMIT을 활용하여 페이징 쿼리 활용하기 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 마지막으로 아래와 같은 Area라는 테이블도 있습니다. 아래와 같은 쿼리를 작성하게 되면 식당 이름과 reviewCount, distance를 보여주게 됩니다. select restaurantName,ifnull(reviewCount, 0) reviewCount, round(6371 * acos(cos(radians(areaLatitude)) * cos(radians(restaurantLatitude)) * cos(radians(restaurantLongitude) - radians(areaLongitude)) + sin(radians(ar..
MySQL ) 변수에 값을 할당하여 값마다 다르게 정렬하는 쿼리 짜기. 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 마지막으로 아래와 같은 Area라는 테이블도 있습니다. 아래와 같은 쿼리를 작성하게 되면 식당 이름과 reviewCount, distance를 보여주게 됩니다. select restaurantName,ifnull(reviewCount, 0) reviewCount, round(6371 * acos(cos(radians(areaLatitude)) * cos(radians(restaurantLatitude)) * cos(radians(restaurantLongitude) - radians(areaLongitude)) + sin(ra..
MySQL ) left outer join 활용, ifnull 활용 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 아래와 같은 쿼리를 실행하면 각 식당의 리뷰수가 몇 개 인지 출력할 수 있습니다. select restaurantName,reviewCount from Restaurant inner join (select restaurantId, count(*) as reviewCount from Review group by restaurantId) ReviewCount on Restaurant.restaurantId = ReviewCount.restaurantId 리뷰수 가 0개인 식당도 같이 출력하게 하려면 null 값도 표시 하는 left ..