Me encontré con un problema extraño sobre sqlite3. Obtuve diferentes conexiones del mismo archivo de base de datos usando el método open(). la conexión 1 comienza una transacción, y la conexión 2 comienza otra transacción, que es actualizar varios registros de una tabla. Luego, la conexión 1 confirma la transacción, y luego la conexión 2 confirma su transacción. Pero descubrí que el comando de actualización de la conexión 2 en realidad nunca actualiza el registro en la base de datos. No hay excepción lanzada durante este procedimiento. No sé por qué ocurre el problema. ¿Alguien puede explicarme la razón?¿Pueden las diferentes conexiones de la misma base de datos sqlite comenzar transacciones al mismo tiempo?
7
A
Respuesta
14
Si lee la documentación de SQLite, verá que admite múltiples conexiones para lectura solamente, no puede escribir en la base de datos desde conexiones múltiples, porque no está diseñado para eso.
5
A menos que utilice COMENZAR inmediatas para iniciar sus operaciones, se corre el riesgo de tener que deshacer y volver a intentar ellos. A BEGIN no hace ningún bloqueo; UPDATE o INSERT subsiguientes obtiene el bloqueo, y debe verificar el código de resultado para ver si falla. Consulte esta página en transactions y esta en locks.
Cuestiones relacionadas
- 1. En la base de datos Sqlite, Cómo insertar varias filas en la tabla al mismo tiempo
- 2. Es la base de datos Sqlite hilo seguro
- 3. ¿Cómo se comportan las transacciones distribuidas con múltiples conexiones al mismo DB en un entorno enhebrado?
- 4. ¿La memoria transaccional de software es la misma que las transacciones de base de datos?
- 5. Uso de dos bases de datos diferentes al mismo tiempo con Entity Framework
- 6. Cómo decidir utilizar las transacciones de la base de datos
- 7. Base de datos y conexiones
- 8. Error al separar la base de datos SQLite - la base de datos está bloqueada
- 9. ACID y transacciones de base de datos?
- 10. ¿Cómo pueden las consultas de django sql usar mayúsculas y minúsculas y contiene al mismo tiempo?
- 11. ¿Cómo implementan las transacciones los proveedores de base de datos?
- 12. Número de transacciones de SQLite ¿Límite?
- 13. sqlite transición de las transacciones a los puntos de guardado
- 14. ¿Pueden resurgir las declaraciones de casos de formato comenzar en la misma línea que el caso?
- 15. ¿Usar accept() y select() al mismo tiempo?
- 16. ¿Se pueden usar AVCaptureVideoDataOutput y AVCaptureMovieFileOutput al mismo tiempo?
- 17. cómo reducir la base de datos sqlite?
- 18. ¿Pueden funcionar wifi y 3G al mismo tiempo en Android?
- 19. Administración de conexiones de SQLite en Android
- 20. H2 Conexiones múltiples a la base de datos
- 21. php, mysql - Demasiadas conexiones al error de base de datos
- 22. ¿Está actualizando las versiones de la base de datos sqlite?
- 23. Seguridad de la base de datos Sqlite
- 24. ¿SQLite admite transacciones en múltiples bases de datos?
- 25. Looping a través de dos selectores diferentes al mismo tiempo
- 26. Varias instancias de una base de datos levelDB al mismo tiempo
- 27. CAKeyframeAnimation múltiple en diferentes capas al mismo tiempo
- 28. Node.js postgres + gestión de transacciones de base de datos
- 29. se cierren las conexiones de base de datos en Java
- 30. Conexiones de base de datos y F #
Sin embargo, puede tener dos transacciones de escritura simultáneas, que es lo que está causando el problema. –
Entonces, si hay una transacción que está realizando una operación de escritura en la base de datos, cualquier otra operación de escritura no puede modificar la base de datos, sin importar si estas operaciones están dentro de una transacción o no. – user26404
¿Puedo hacer una operación de selección cuando hay otra conexión que realiza una operación de escritura (insertar, actualizar) al mismo tiempo? – user26404