php 편집기 Banana는 SQLite의 간헐적인 테이블 손실 오류에 대한 솔루션을 제공합니다. SQLite 데이터베이스를 사용할 때 메모리 오류나 테이블 손실이 발생할 수 있습니다. 이 오류는 일반적으로 잘못된 데이터베이스 작업이나 메모리 문제로 인해 발생합니다. 이 문제를 해결하기 위해 쿼리문 최적화, 메모리 제한 증가 등과 같은 몇 가지 조치를 취할 수 있습니다. 이 문서에서는 적절한 데이터베이스 작동을 보장하기 위해 이 문제를 해결하는 방법을 자세히 설명합니다.
우리는 github.com/mattn/go-sqlite3 v1.14.16을 통해 Go에서 SQLite 3.39.4를 사용하고 있습니다. 연결 문자열은 ":memory:?cache=shared&mode=rwc&_mutex=no&_journal=WAL&_sync=NORMAL"
테스트에서 "해당 테이블 없음: 구성" 오류가 가끔 표시됩니다. 혼란스러운 점은 문제의 쿼리가 테스트 사례에서 성공적으로 사용되었으며 이후 데이터베이스 연결과 오류를 발생시키는 트랜잭션 개체 모두에서 sqlite_master에 대한 쿼리에 테이블이 표시된다는 것입니다. 그러나 오류가 발생하면 쿼리가 더 이상 성공하지 않습니다.
모호한 질문인 줄 알지만, 적어도 어디를 볼지 제안해 줄 수 있는 사람이 있나요? 데이터베이스 연결은 항상 동일한 포인터 값을 갖습니다.
업데이트:
두 번째 시도에서 이 SSCCE의 문제를 거의재현할 수 있었습니다.
으아악showTables는 SSCCE의 테이블을 표시하지 않지만 실제 테스트에서는 표시하기 때문에 실제 질문과 다릅니다. 이 예에서는 example.db
대신 :memory:
를 사용하는 문제를 보여주지만 트랜잭션이 닫히지 않은 경우에만 해당됩니다. 이것이 인메모리 데이터베이스의 알려진 또는 예상된 동작입니까? :memory:
而不是 example.db
的问题,但前提是事务未关闭。这是内存数据库已知的或预期的行为吗?
Go database/sql
隐式使用连接池,但 :memory:
해결 방법Go database/sql
은 암시적으로 연결 풀링을 사용하지만 :memory:
데이터베이스는 기본적으로 연결을 비공개
https://www.php.cn/link/d346256ad566cf97801e5cecc45a2557
cache=shared
,正如您所尝试的那样。但 SQLite 要求将其指定为 URI:file::memory:?cache=shared
(file:
여러 SQLite 연결이 백그라운드에서 생성/닫기 때문에 각 문을 실행하는 연결과 데이터베이스에 대해 실제로 알 수 없으므로 당연히 일부 연결은 특정 데이터를 볼 수 있지만 다른 연결은 도착할 수 없습니다.
연결을 공유하는 한 가지 방법은
을 사용하는 것입니다.)file:memdb1?mode=memory&cache=shared
(命名为 memdb1
file:/memdb1?vfs=memdb
(命名为 /memdb1
,并使用 memdb
)VFS)
🎜 🎜 다른 매개변수는 불필요하거나 해로울 수도 있습니다(인메모리 데이터베이스의 경우). 🎜위 내용은 SQLite: 메모리: 데이터베이스의 간헐적인 테이블 누락 오류의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!