【问题标题】:SQLite Update Method Not Failing for Invalid datatypeSQLite 更新方法不会因无效数据类型而失败
【发布时间】:2012-10-05 13:05:24
【问题描述】:

我在使用 SQLite 数据库时遇到了一个奇怪的问题,特别是对 UPDATE 查询的数据验证。所以让我开始吧,如果我使用以下查询,当我尝试运行它时会出现“数据类型不匹配”错误。这是正确且符合预期的,因为字段类型被标记为整数。

INSERT OR REPLACE INTO Table ('Column') VALUES ('shouldFail')

但是,人们也希望以下 UPDATE 查询应该返回相同的“数据类型不匹配”错误,但事实并非如此。我可以很好地运行以下查询,这允许我在标记为仅 INTEGER 的列中得到一个“字符串”数据类型......

UPDATE Table SET 'Column'='shouldFail' WHERE SecondColumn = 'Some value'

那么谁能告诉我为什么 SQL 数据类型验证对第一个查询有效,而对第二个查询无效?

非常感谢 山姆

【问题讨论】:

  • 对我来说,这两种情况都没有抛出任何错误。看看sqlfiddle.com/#!5/71360/2
  • Table 是如何声明的?任何触发器或检查? (你应该使用Column 而不是'Column'。)
  • 对不起,我给出的例子是一个简单的例子,我实际上正在处理几列,所以我使用('column','column2'等)......表格中的问题列就在CREATE TABLE "Table" ("Column" INTEGER NOT NULL)之内

标签: sql database sqlite


【解决方案1】:

根据我的 MySQL 知识,我会说 REPLACE 不是 UPDATE,而是 DELETE, THEN INSERT。此外,我敢打赌,当使用错误的数据类型更新行并且值设置为默认值(整数为 0)时,您的数据库设置为仅发出警告。插入失败,更新引发警告。不幸的是,我对 sqlite 不是很熟悉,但我在某处听说它们并没有那么不同?

P.S.:试试SHOW WARNINGS; 看看有没有什么...

【讨论】:

  • 我应该补充一点,我在 iOS 应用程序中使用 FMDB 包装器。据我所知,我没有显示警告的选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2021-07-10
  • 2021-09-22
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多