집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 행번호() 정렬 기능의 사용법과 주의사항_MySQL
많이 사용되지는 않지만, 함수 개발을 위해 mysql에서 문장을 작성해야 하는 상황이 있습니다. SQL Server에서는 정렬을 위해 row_number() 함수를 사용하는 데 익숙하지만 mysql에는 그러한 기능이 없습니다. 그러던 중 포 주인이 쓴 글을 발견했습니다. 변수 할당을 통한 쿼리. (PS 제가 테스트한 버전은 mysql 5.6 입니다.)
먼저 테이블을 생성하세요
CREATE TABLE `test` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Col1` varchar(50) DEFAULT NULL, `Col2` varchar(50) DEFAULT NULL, `Col3` int(11) DEFAULT NULL, `Col4` float DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
그런 다음 테스트 데이터를 삽입하고 포 마스터가 소개한 방법을 사용하여 테스트합니다
insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激发",5,7); delimiter // select @row:=case when @row is null then 1 else @row+1 end as RNr, ID,Col1,Col2,Col3,Col4 from test ; // delimiter ;
쿼리 결과는
단점을 확인할 때 왜 Rnr은 항상 1인가요? 이 쿼리의 경우 @row 변수의 값은 항상 null이었으므로 사례 판별식에 따라 1만 될 수 있습니다. 이런 현상을 일으켰습니다. 하지만 다시 실행하면 같은 스크립트를 사용하게 되겠지만
다시 실행하면 2345가 나와야 합니다
테스트를 통해 이것이 사실임을 확인했기 때문에 볼 수 있습니다. 해당 변수는 이 세션에 항상 존재하고 매번 사용되므로 이전 상황이 발생합니다.
실제로 해당 솔루션도 매우 간단합니다. 각 세션이 동일한 값을 사용하므로 문제를 해결하려면 처음에만 초기 값을 할당하면 됩니다. Starting row = 0; 이 문장을 추가하면 실행될 때마다 초기값이 먼저 할당되어 일관된 실행 결과를 얻을 수 있습니다.
이 테스트를 통해 이 데이터베이스에서는 제어 변수 hin의 초기 값이 중요하다는 것을 알 수 있습니다.
이상은 에디터가 소개한 Mysql row_number() 정렬 기능의 사용법과 주의사항입니다. 문의사항이 있으시면 메시지를 남겨주시면 에디터가 답변해 드리겠습니다. 시간에. 홈페이지에 대한 귀하의 지원에 진심으로 감사드립니다!