[MySQL] JSON_ARRAY_APPEND, affectedRows: 1이지만 changedRows: 0 오류

또잉의 공부일지·2023년 8월 28일
post-thumbnail

해결법 1

affectedRows는 쿼리로 영향을 받는(변경되는) 행의 수를 나타내며, changedRows는 실제로 변경된 행의 수를 나타냅니다. 이 상황에서 affectedRows가 1이지만 changedRows가 0인 경우, 실제로 데이터베이스에서 데이터의 변경이 일어나지 않았다는 것을 의미합니다.

JSON_ARRAY_APPEND 함수는 JSON 배열의 내용을 변경하는 것이 아니라 새로운 값을 추가하는 역할을 합니다. 만약 user_order가 초기에 빈 배열이었을 경우, JSON_ARRAY_APPEND로 값을 추가해도 내용이 변경되는 것이 아니기 때문에 changedRows가 0이 될 수 있습니다.

이를 해결하기 위해서는 JSON_ARRAY_APPEND 대신 JSON_ARRAY를 사용, 다음과 같이 수정할 수 있습니다.

javascript
Copy code
const updateQuery = UPDATE Users SET user_order = JSON_ARRAY( JSON_OBJECT('amount', ?, 'product_name', ?, 'order_time', ?) ) WHERE user_id = ?;
위의 코드는 user_order 배열을 새로운 JSON 배열로 대체하는 것이므로, changedRows 값이 1로 반환될 것입니다.

해결법 2

위의 방법으로 했더니 null, $ 같은 쓰레기 값들이 JSONARRAY 안에 들어감

이런 식으로 유저 데이터 생성할 때 초기화하는 형식으로 하면 APPEND가 정상 동작함.

0개의 댓글