sql - sqlite创建表列默认值不起作用
问题描述
我想执行一个 sqlite 查询,它返回某个列具有(空)值的行。我尝试了很多变化,例如
SELECT ContribId FROM stack_contrib_tab WHERE BatchId IS NULL
SELECT ContribId FROM stack_contrib_tab WHERE BatchId ISNULL
这些返回所有行,无论 BatchId 是否为空。感兴趣的行在 DbVisualizer 列中显示“(null)”。所以然后我想也许该列真的是空的,所以我尝试了
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ''
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ""
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '""'
这些结果没有错误,但也没有结果集。然后我想也许它实际上是'(null)'所以我尝试了
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '(null)'
这也导致了一个空的结果集。然后我想也许我会强制默认值为 null 所以我创建了这样的表列:
BatchId DEFAULT NULL
那也没有用。该字段仍显示 (null),并且查询的行为方式相同。然后我想,好吧,我将使用 0 而不是 NULL。所以我创建了这个领域
BatchId INTEGER DEFAULT 0
你猜对了。那也没有用。该列仍然显示(空)。然后我在某处读到您还必须将列设置为 NOT NULL 所以我尝试了
BatchId INTEGER DEFAULT 0 NOT NULL
现在我得到错误
org.sqlite.SQLiteException:[SQLITE_CONSTRAINT_NOTNULL] NOT NULL 约束失败(NOT NULL 约束失败:stack_contrib_tab.BatchId)
我究竟做错了什么?
更新:我成功地将 BatchId 设置为 0,而不是 null。该错误发生在稍后插入期间,而不是像我想象的那样在创建表时发生。
解决方案
推荐阅读
- javascript - 如何在 serenity-js 中访问多个 id 元素
- c# - 在 C# 中导入 CSV 文件将字符串列表转换为特定的类类型列表
- c++ - const 数组如何能够在每个元素中仅包含字符,而 char* 数组如何能够指向每个元素中的字符串?
- c# - 使用 Mongodb 返回许多对象 LINQ Select
- python - 熊猫:从 timedelta 中提取小时
- cordova - 如何在 ionic 4 中使用非原生 cordova 插件
- php - WooCommerce - 将简短描述更改为摘要描述
- python - 从命令行运行的 Python - ModuleNotFoundError
- angular - 如何为步进器上的每一步加载一个动态组件
- excel - 如何将 vbYes / vbNo 转换为布尔值?