当前位置: 首页 > 面试题库 >

如何在SQLite中使用序列?

姚海
2023-03-14
问题内容

我正在编写一个基于PHP的Web应用程序,该应用程序可以与多个数据库系统一起使用。最重要的是MySQL和SQLite,但是PostgreSQL和其他也不错。为此,我尝试使用尽可能可移植的SQL。在无法做到这一点的地方,我在查询中定义了一些元数据,这些元数据由数据库层处理,并转换为特定于平台的SQL命令。

我现在正在尝试添加序列支持。每个DBMS处理序列的方式都不同,没有通用的方法可以用SQL编写它们。我已经阅读并理解PostgreSQL的方式。我发现了一个有趣的MySQL解决方案,该解决方案使用MyISAM表来逃避事务的隔离约束。毕竟,序列不会随使用它们的事务一起回滚,而这正是我想要的。序列应该是多用户安全的。

现在我还没有找到SQLite的解决方案。它缺少内置的序列支持。它没有提供在正在运行的事务外部存储数据的方法。我当前的实现是将表锁定足够远,以执行SELECT
MAX(…)并使用该值。但我想完全摆脱它。在SQLite中,这种方法需要锁定整个数据库!

有人知道使用SQLite的解决方案吗?


问题答案:

我将使用lastInsertRowID。这将返回最后插入的数据的rowid(等于该行的INTEGER PRIMARY KEY值)。然后,您将不需要任何顺序。



 类似资料:
  • 我试图在一个应用程序中使用quartz和SQLite。当我阅读这里的文档时,我注意到它们在可用的数据库中没有提到SQLite。他们说: JDBCJobStore几乎可以与任何数据库一起工作,它已经被Oracle、PostgreSQL、MySQL、MS SQLServer、HSQLDB和DB2广泛使用。要使用JDBCJobStore,必须首先创建一组数据库表供Quartz使用。您可以在Quartz发

  • 我使用的是一个包含DATETIME列的SQLite数据库。jOOQ default将日期时间列绑定到java。sql。时间戳。查询包含DATETIME列的表会导致每列出现NumberFormatException(已处理)。 我使用jOOQ 3.11.9。 异常在parse方法,当它第一次尝试将时间戳字符串值转换为数字时。 查看和DefaultTimestampBinding方法时,时间戳总是ge

  • 我正在尝试导出一些SQLite表数据。我正在获取IOException:/TestFileExport0719a.csv:open失败:EROFS(只读文件系统) 更改后出现以下错误: File outFile=新文件(environment.getExternalStoragePublicDirectory(environment.directory_downloads),outFileName

  • 本文向大家介绍在Lua程序中使用SQLite的教程,包括了在Lua程序中使用SQLite的教程的使用技巧和注意事项,需要的朋友参考一下  SQLite导入 我们可以用一个简单语句导入SQLite库,假设Lua中正确实现并已完成。在安装过程中,文件夹libsql包含数据库相关的文件。   变量sqlite3将提供通过参照主sqlite3表访问该功能。 建立连接 我们成立了发起sqlite环境,然后创

  • 问题内容: 我不知道如何 在 Java .jar文件中包括一个SQLite数据库以进行部署(通过Java WebStart)。 数据库并 没有 需要在运行时更新中…它本质上是一个华而不实的配置文件。 顺便说一下,使用Eclipse。 问题答案: 要考虑的另一个不错的选择可能是derby,javadb。它现在已与Java捆绑在一起,并且安装速度非常快,并且具有良好的性能。 问候,斯特凡

  • 在 Flask 中,在请求开始的时候用 before_request() 装饰器实现 打开数据库连接的代码,然后在请求结束的时候用 before_request() 装饰器关闭数据库连接。在这个过程中需要配合 g 对象。 于是,在 Flask 里一个使用 SQLite 3 的简单例子就是下面这样: import sqlite3 from flask import g DATABASE = '/p