SQLite 数据库为同一列返回两个不同的值
SQLite database returning two different values for the same column
我目前正在制作一个 NodeJS 应用程序,我使用 SQLite 作为后端数据库。在尝试软删除 table 中的条目时,我 运行 遇到了问题。当我使用应用程序更改 'deleted' 属性时,更改出现在 SQLite CLI 中,但应用程序仍将每条记录显示为未删除。这些是我用来测试应用程序和数据库的步骤:
- 在 SQLite CLI 中,调用 createDB.sql 脚本删除所有 table 和
重新设置它们。
- 调用populateDB.sql脚本将测试数据输入每个table
- 在 SQLite CLI 中检查记录是否正确(SELECT id,从 table1 中删除;)
- 在应用程序控制台检查记录是否正确
- 在应用程序中,更改单个条目的已删除属性
- 向控制台输出条目控制台显示条目未删除
- 在应用程序中,更改所有条目的已删除属性
- 输出条目到控制台控制台显示条目未删除
- 在 SQLite CLI 中检查记录是否正确输出显示所有记录的删除属性已更改
- 向应用程序控制台输出已删除的属性仍然显示所有条目未被删除
这些是我为尝试解决问题而采取的步骤:
- 已删除字段的数据类型为 BOOLEAN。 SQLite 没有特定的布尔类型,但将其转换为 1 或 0。我尝试使用 1 和 0、'true' 和 'false' 甚至 'yes' 或 'no'行为没有变化。
- 我已经尝试过使用数据库的相对和绝对文件路径。
- 我在应用程序中添加了时间延迟,以防更新数据库出现延迟。
- 我研究了文件锁定,了解到 SQLite 可以防止两个进程同时访问一个文件。说得通。我终止了我的 CLI 进程并尝试仅从应用程序更新已删除的属性,确保它是唯一连接到数据库的东西,但得到了相同的结果。
在所有这些测试之后,我相信应用程序正在 写入 到实际的数据库文件,但是正在 读取 从缓存中。这是一个准确的结论吗?如果是这样,我如何告诉应用程序在执行更新查询后刷新它的缓存?
应用程序正在写入数据库文件,并从同一个数据库而不是缓存中读取。但是我的查询设置为 SELECT * FROM table1 LEFT OUTER JOIN table2 LEFT OUTER JOIN table3 LEFT OUTER JOIN table4
。 table1、table2 和 table3 都有一个名为“已删除”的列。我正在更新 table1.deleted
但正在阅读 table2.deleted
。我已将查询修改为仅 select 从现在起我需要的列!
我目前正在制作一个 NodeJS 应用程序,我使用 SQLite 作为后端数据库。在尝试软删除 table 中的条目时,我 运行 遇到了问题。当我使用应用程序更改 'deleted' 属性时,更改出现在 SQLite CLI 中,但应用程序仍将每条记录显示为未删除。这些是我用来测试应用程序和数据库的步骤:
- 在 SQLite CLI 中,调用 createDB.sql 脚本删除所有 table 和 重新设置它们。
- 调用populateDB.sql脚本将测试数据输入每个table
- 在 SQLite CLI 中检查记录是否正确(SELECT id,从 table1 中删除;)
- 在应用程序控制台检查记录是否正确
- 在应用程序中,更改单个条目的已删除属性
- 向控制台输出条目控制台显示条目未删除
- 在应用程序中,更改所有条目的已删除属性
- 输出条目到控制台控制台显示条目未删除
- 在 SQLite CLI 中检查记录是否正确输出显示所有记录的删除属性已更改
- 向应用程序控制台输出已删除的属性仍然显示所有条目未被删除
这些是我为尝试解决问题而采取的步骤:
- 已删除字段的数据类型为 BOOLEAN。 SQLite 没有特定的布尔类型,但将其转换为 1 或 0。我尝试使用 1 和 0、'true' 和 'false' 甚至 'yes' 或 'no'行为没有变化。
- 我已经尝试过使用数据库的相对和绝对文件路径。
- 我在应用程序中添加了时间延迟,以防更新数据库出现延迟。
- 我研究了文件锁定,了解到 SQLite 可以防止两个进程同时访问一个文件。说得通。我终止了我的 CLI 进程并尝试仅从应用程序更新已删除的属性,确保它是唯一连接到数据库的东西,但得到了相同的结果。
在所有这些测试之后,我相信应用程序正在 写入 到实际的数据库文件,但是正在 读取 从缓存中。这是一个准确的结论吗?如果是这样,我如何告诉应用程序在执行更新查询后刷新它的缓存?
应用程序正在写入数据库文件,并从同一个数据库而不是缓存中读取。但是我的查询设置为 SELECT * FROM table1 LEFT OUTER JOIN table2 LEFT OUTER JOIN table3 LEFT OUTER JOIN table4
。 table1、table2 和 table3 都有一个名为“已删除”的列。我正在更新 table1.deleted
但正在阅读 table2.deleted
。我已将查询修改为仅 select 从现在起我需要的列!