Database(3)
-
upsert query에서 발생한 문제점
[환경] Mysql5.7(InnoDB), Python [상황] upsert 쿼리에서 id(auto_increment)컬럼이 순차적이 아닌 건너 뛰면서 저장되고 있는 현상이였습니다. [원인] InnoDB에서 auto_increment 열은 각각의 트랜잭션에서 순차적으로 증가되며, 각 트랜잭션에서 할당된 auto_increment 값은 InnoDB의 메모리 버퍼에 저장되어, 나중에 디스크에 쓰여질 때까지 버퍼링 된다는 개념이 있습니다. 제 나름대로 정리를 하면 쿼리를 실행하기전 이미 auto_increment값이 각 각의 트랜잭션마다 할당 되어져 있다고 보입니다. 그렇기 때문에 만약 id가 1로 insert로 할려다가 이미 해당 row가 있다고 가정하면 update를 실행 후 그 다음 row를 실행하면 id..
2023.04.19 -
where , having 특징
where - 집계 함수(group)가 적용되기 이전에 해당하는 레코드들을 선택합니다. having - 그룹화된 결과에 대한 필터링을 수행합니다. group by와 무조건 같이 써야합니다. 즉 그룹화 된 결과에 대해서만 조건문이 적용 가능합니다. [예시] // 올바른 sql SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) >= 55000 ORDER BY avg_salary DESC; // 잘못된 sql SELECT department, AVG(salary) AS avg_salary FROM employees where AVG(salary) >= 55000 GROUP BY dep..
2023.04.19 -
Mysql now(), curdate() 차이
now() 함수는 현재 시간과 날짜를 "년-월-일 시:분:초" 형식으로 반환합니다. curdate() 함수는 현재 날짜 정보만 "년-월-일" 형식으로 반환합니다.
2023.04.19