select count(*),floor(rand(0)*2) as x from myTable group by x;
myTable에는 5개의 행이 저장되어있구요.
위 쿼리를 실행하면
ERROR 1062 (23000): Duplicate entry '1' for key 'group_key'
이렇게 에러가 발생합니다.
왜 발생하는지에 대해 설명하는 스택오버플로우 글이 있는데(https://stackoverflow.com/questions/11787558/sql-injection-attack-what-does-this-do)
이해가 안가네요.
저기서 말하는게
MariaDB [myDb]> select floor(rand(0)*2) as x from myTable;
+---+
| x |
+---+
| 0 |
| 1 |
| 1 | <- duplicate key
| 0 |
| 1 |
+---+
5 rows in set (0.000 sec)
이렇게 쿼리를 실행했을 때 3번째 행에서 1이 중복되어 저렇게 duplicate 에러가 나는거라는데.
중요한건 count(*)를 넣어야 에러가 발생한다는거죠.
count(*)는 단순히 행의 개수를 출력해주는거잖아요.
그런데 이거랑 duplicate 에러가 무슨 연관인건지 이해가 안가네요.
혹시 아시는 분 계실까요?
흠..여기저기 이 문제와 관련한 토론이 있군요. 결론적으로는 버그로 봐야할 것 같습니다. 오류가 나지 않으려면 쿼리를 수정할 수 밖에 없을 듯 합니다.
https://okky.kr/article/401944
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=230929