데이터베이스를 연 직후 특정 테이블의 마지막 자동 증가 값을 얻으려면 어떻게합니까? 삽입 트랜잭션이 없기 때문에 last_insert_rowid()
이 아닙니다. 즉, 특정 테이블에 대해 새 행을 삽입 할 때 자동 증가가 선택할 번호를 미리 알고 싶습니다.현재 자동 증가 값을 얻는 방법
답변
자동 증가 된 열이 정의 된 방법에 따라 다릅니다.
열 정의가 INTEGER PRIMARY KEY AUTOINCREMENT
인 경우 SQLite는 sqlite_sequence
이라는 내부 테이블에서 가장 큰 ID를 유지합니다.
열 정의에 키워드 AUTOINCREMENT
이 포함되어 있지 않으면 SQLite는 '일반'루틴을 사용하여 새 ID를 결정합니다. documentation에서 :
일반적인 알고리즘은 새로 생성 된 행을 삽입하기 전에 테이블에서 가장 큰 ROWID보다 하나의 큰 ROWID를 제공하는 것입니다. 테이블이 처음에 비어 있으면 1의 ROWID가 사용됩니다. 가장 큰 ROWID가 가능한 가장 큰 정수 (9223372036854775807)과 같으면 데이터베이스 엔진은 이전에 이 아닌 것을 찾을 때까지 후보 ROWID를 무작위로 선택하기 시작합니다. 알맞은 수의 시도 후에 사용되지 않은 ROWID를 찾을 수 없으면 삽입 작업이 실패하고 SQLITE_FULL 오류가 발생합니다. 음수 ROWID 값이 명시 적으로 삽입되지 않으면 자동으로 생성 된 ROWID 값은 항상 0보다 커야합니다.
나는 AUTOINCREMENT
없이 열에 대해 다음 ID를 결정하는 유일한 확실한 방법은 첫째 VACUUM 데이터베이스이며, 독서 기억; 그러면 모든 ID 카운터가 해당 테이블의 가장 큰 기존 ID + 1로 재설정됩니다. 그러나 더 이상 해당 인용문을 찾을 수 없으므로 더 이상 사실이 아닐 수 있습니다. 말했다
, 나는 다른 프로세스가 동시에 데이터베이스에 쓸 수 있다는 심지어 원격 기회가 특히 slash_rick_dot 사전에 자동 증가 ID를 가져 오는 것은 나쁜 생각이다에 동의합니다.
다른 데이터베이스는 자동 증가를 다르게 구현합니다. 그러나 내가 아는 한 그들 중 누구도 당신이 묻고있는 질문에 답하지 않을 것입니다.
자동 증가 기능은 새로 추가 된 테이블 행에 대한 고유 한 ID를 작성하기위한 것입니다. 행이 아직 삽입되지 않은 경우이 기능은 ID를 생성하지 않습니다.
그리고 말이 맞습니다. 다음 자동 증가 숫자를 얻은 경우 어떻게 할 것입니까? 가능성은 삽입하지 않은 새 행의 기본 키로 지정하려는 것입니다. 그러나 ID를 얻은 시간과 행을 삽입하는 데 사용한 시간 사이에 데이터베이스에서 다른 프로세스의 행을 삽입하기 위해 해당 ID를 사용할 수있었습니다.
귀하가 선택할 수있는 것은 귀하가 직접 생성 한 ID를 관리하거나 자동 생성 식별자를 사용하기 전에 행이 삽입 될 때까지 기다리는 것입니다.
- 1. 테이블에서 증가 값을 얻는 방법
- 2. 엔터티 프레임 워크 코드에서 자동 증가 값을 얻는 방법
- 3. LINQ에서 자동 증가 값을 설정하는 방법
- 4. 트리거의 자동 증가 값
- 5. UISlider의 현재 값을 얻는 방법
- 6. mysql 자동 증가 값을 늘리십시오.
- 7. 현재 값에서 SQL 자동 증가 다시 시드
- 8. 자동 증가 방법?
- 9. PostgreSQL에서 자동 증가 방법?
- 10. mysql을 - 자동 증가 (5 의한 방법 자동 증가)
- 11. jQuery의 ajaxSetup에서 현재 값을 얻는 방법
- 12. jquery에서 텍스트 상자의 현재 값을 얻는 방법
- 13. 날짜와 현재 시간으로 datetimepicker 값을 얻는 방법
- 14. CakePHP 데이터 저장 후 최신 자동 증가 ID를 얻는 방법
- 15. 테이블의 두 필드에 대한 자동 증가 ID를 얻는 방법
- 16. redis를 사용하여 자동 증가 값을 생성해야합니까?
- 17. 최대 절전 모드에서 자동 증가 값을 변경하십시오.
- 18. 자동 증가
- 19. mysql에서 다중 자동 증가
- 20. 자동 증가 고유 식별자
- 21. 세션에서 변수 자동 증가
- 22. 자동 증가 필드에 삽입
- 23. 자동 증가 번호
- 24. MySQL에서 자동 증가 저장
- 25. 자동 제안을 얻는 방법
- 26. MySQL 자동 증가 문제
- 27. 현재 스크롤 값을 설정하는 방법
- 28. 삽입하지 않고 mysql 자동 증가
- 29. 자동 증가 내가 그것을 특정 번호에서 시작 만들기 위해 자동 증가 값을 변경하기 위해 노력하고있어
- 30. 현재 포커스가있는 TextBox를 얻는 방법?
sqlite 설명서에 따르면 엔진이 값을 자동 증가 시키려면 'INTEGER'와 'PRIMARY KEY'를 설정해야합니다. 'AUTOINCREMENT'를 설정하려했지만 작동하지 않습니다. – Pablo
데이터베이스에 독점적으로 액세스 할 수 있으며 다른 프로세스는 db에 액세스 할 수 없습니다. – Pablo
@Pablo : 예, 키가 ROWID의 별명이 되려면 항상 'INTEGER PRIMARY KEY'여야합니다. 'AUTOINCREMENT' 키워드를 추가하면 다음 ID가 계산되는 방식 만 바뀝니다. 이는 [documentation] (http://www.sqlite.org/faq.html#q1)에 설명 된대로 작동합니다. – Martijn