【问题标题】:sql - select quotes disable not null requirementsql - 选择引号禁用非空要求
【发布时间】:2012-04-18 20:49:04
【问题描述】:

在我的数据库中,cardid 列未将 null 设置为 true,即不允许 null。

当我在 delphi cum zeos TZQuery 中运行以下查询时,结果字段 card_id0 具有所需的属性为 true,这是正确的,但结果字段 card_id1 不是,即 card_id1 周围的引号似乎意思是给我数据但没有限制。

select c.id, c.cardid as card_id0, c.cardid as "card_id1" 
  from mydata c

在sql中有这个标准吗?

【问题讨论】:

  • 我认为对结果集/游标的约束根本不是 sql 标准的一部分。
  • 我很确定这是 Delphi 问题,而不是 MySQL 问题。

标签: mysql sql delphi


【解决方案1】:

您看到的是 TZQuery 没有从表/查询元数据中检测到数据库约束(非空)。这仅在您通过 TZQuery 组件添加或更新记录时才有意义。如果您尝试为card_id0card_id1 添加或更新一个空记录,您仍然会遇到异常。异常将由数据库而不是组件生成。

通常,引用字段名称(或别名)仅用于在 SQL 查询中允许字段名称中出现非法字符,即。例如,在字段名称中有一个空格。引用字段名称可能会产生副作用,例如在 Firebird/Interbase 中,引用字段名称会使其区分大小写,而它们通常不区分大小写。

【讨论】:

  • 这似乎是正确的答案(最后一句很有趣)。我将约束与内存表一起使用,以确保数据在尝试将其输入数据库之前是正确的,从而避免引发异常。非常感谢。
【解决方案2】:

不要认为这与 sql 有任何关系,您不会通过结果集获得约束。 我猜这是 TZQuery。作为一种猜测,我会说它获取了表 C 的元数据,假设 cardid 和 cardid0 之间有一个映射,然后没有“card_id1”。

将select子句中的字段顺序颠倒一下,看看是否需要的属性与之交换。

【讨论】:

  • “不要通过结果集获得约束”!啊,但我做 8=) 因为没有引号,结果字段具有正确的“必需”值 false/true 以匹配数据库中的“允许 null”属性,而引号总是导致错误值
  • 不,你没有。 TZquery 正在返回查询的结果,并且在底层数据库中有一个对等点。不要依赖它,它的准确程度取决于太多的东西。
  • 嗯,非常有效的观点。哦,好吧,回到绘图板。谢谢你在我走得太远之前阻止了我。周末愉快。比尔
猜你喜欢
  • 2012-05-04
  • 2017-04-15
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多