반응형
LOCK TABLES가 테이블이 잠기지 않았다고 말한 후 UNION 쿼리에서 선택
코드의 특정 영역에 테이블을 잠글 필요가 있습니다.
그래서 테이블은 다음과 같이 잠급니다.
LOCK TABLE christmas_game WRITE;
잘 먹히네요.
이제 나는SELECT
이 테이블 위에 올려놓기 때문에 이렇게 하겠습니다.
SELECT SQL_NO_CACHE prize
FROM christmas_game
WHERE user_id = {$this->user_id}
ORDER BY created_at DESC
LIMIT 2
그것도 잘 되는군.그러나 이것은 어떤 이유로도 전혀 동작하지 않습니다.
SELECT prize
FROM christmas_game
WHERE DATE(created_at) = CURDATE()
AND user_id != '{$uniqId}'
GROUP BY prize
UNION
SELECT prize
FROM christmas_game
WHERE user_id = {$user->user_id}
AND user_id != '{$uniqId}'
AND prize IN ('promo_1', 'promo_2')
다음과 같은 오류가 나타납니다.Table 'christmas_game' was not locked with LOCK TABLES
. 물론 그UNION
두 쿼리 모두 문제없이 정상적으로 동작하기 때문에 여기서 문제가 발생합니다.
왜 그런 것일까요?
양쪽 테이블을 잠궈야 하고, 같은 테이블을 두 번 잠글 수 없습니다.
해결방법은 테이블에 에일리어스를 추가하는 것입니다.
LOCK TABLE christmas_game as table_locked_game_1 WRITE, christmas_game as table_locked_game_2 write;
그런 다음 동일한 별칭을 유니언에 추가합니다.
SELECT prize
FROM christmas_game as table_locked_game_1
WHERE DATE(created_at) = CURDATE() GROUP BY prize
UNION
SELECT prize FROM christmas_game as table_locked_game_2
WHERE user_id = 81
AND prize IN ('promo_1', 'promo_2')
언급URL : https://stackoverflow.com/questions/47538074/select-on-union-query-after-lock-tables-says-table-was-not-locked
반응형
'source' 카테고리의 다른 글
레코드를 단일 레코드로 선택하여 시간 차이를 확인하는 방법 (0) | 2022.12.18 |
---|---|
네이티브 코드를 호출하기 위해 유고 인민군 대신 JNI를 사용하시겠습니까? (0) | 2022.12.18 |
jQuery의 .bind() 대 .on() (0) | 2022.12.08 |
cURL에서 $_POST 값 전달 (0) | 2022.12.08 |
MySql workbench 쿼리 이력(마지막으로 실행된 쿼리/쿼리). 즉, 테이블 생성/변경, 선택, 업데이트 쿼리 삽입 (0) | 2022.12.08 |