반응형
MySQL: 자동 증가 열이 있는 테이블에 삽입 후 예기치 않은 SELECT 결과
일부 데이터를 테이블에 삽입한 다음 동일한 테이블에서 SELECT 쿼리를 실행하면 이상한 동작이 나타납니다.이 테이블에는 자동 증분 기본 키(uid)가 있으며, 이 문제는 'uid IS NULL'에서 결과를 선택하려고 할 때 발생합니다.
이 내용을 다음 SQL 명령으로 요약했습니다.
DROP TABLE IF EXISTS test_users;
CREATE TABLE test_users (uid INTEGER PRIMARY KEY AUTO_INCREMENT, name varchar(20) NOT NULL);
INSERT INTO test_users(name) values('foo');
SELECT uid FROM test_users WHERE uid IS NULL;
SELECT uid FROM test_users WHERE uid IS NULL; -- no output from this query
예상합니다.SELECT uid FROM test_users WHERE uid IS NULL
어떤 것도 돌려주지 않지만, 가끔은 돌려주기도 합니다.제가 찾은 것은 다음과 같습니다.
- MySQL/MariaDB 버전이 중요해 보입니다.이 문제가 발생한 시스템은 MySQL 5.1.73(CentOS 6.5, 32비트 및 64비트)을 실행하고 있습니다.5.5.37-MariaDB(페도라 19, 64비트)를 실행하는 내 다른 기계.MyISAM 테이블을 사용하도록 구성된 것 외에도 실행 중인 기본 구성.
- INSERT 후 첫 번째 SELECT 쿼리만 영향을 받습니다.
- 자동 증가가 아닌 uid 값을 지정하면 됩니다.
- INSERT와 SELECT 사이에 연결을 끊었다가 다시 연결하면 예상되는 아무런 결과가 나타나지 않습니다.이는 Perl과 같이 연결 개체를 관리하는 곳에서 가장 쉽게 볼 수 있습니다.https://gist.github.com/avuserow/1c20cc03c007eda43c82 에서 이를 보여주는 테스트 스크립트가 있습니다.
이 동작은 의도적인 것입니다.
그것은 분명히 다음과 같습니다.SELECT * FROM t1 WHERE id = LAST_INSERT_ID();
설명한 대로 삽입을 방금 한 연결에서만 작동합니다.
일부 환경에서는 일반적인 방법으로 마지막으로 삽입된(연결을 통해) 행의 자동 증가 값을 가져오는 것을 어렵게 만드는 해결책인 것 같습니다.
정확히 말하면 연결의 마지막 삽입문에 의해 삽입된 첫 번째 행에 할당된 auto_increment 값입니다.하나의 행만 삽입했을 때는 동일하지만, 하나의 삽입문으로 여러 행을 삽입했을 때는 동일하지 않습니다.
언급URL : https://stackoverflow.com/questions/23685742/mysql-unexpected-select-result-after-insert-into-table-with-autoincrement-colum
반응형
'programing' 카테고리의 다른 글
.xlsx에서 셀 색상 가져오기 (0) | 2023.10.26 |
---|---|
MariaDB 데이터베이스에서 mediumblob 값 업데이트 실패 (0) | 2023.10.26 |
Node.js에서 Powershell 스크립트 실행 (0) | 2023.10.21 |
C#에서 (마지막 부분의) 현재 디렉터리 이름 가져오기 (0) | 2023.10.21 |
디렉토리를 재배치한 후 MariaDB가 시작되지 않습니다. (0) | 2023.10.21 |