【问题标题】:Is there a way to check if the record is using the default value for certain columns?有没有办法检查记录是否使用某些列的默认值?
【发布时间】:2020-06-14 22:02:34
【问题描述】:

假设我有一个表,其属性名为“类型”,默认值为“A”。 我想选择使用此默认值“A”的表。显而易见的答案是ofc,

select *
from table 
where Type='A';

但我想看看是否有更有效的方法来做到这一点。也许利用“默认”约束?

【问题讨论】:

  • 你的意思是WHERE Type IS DEFAULT?不知道或不写默认值?
  • 是的。等待WHERE Type IS DEFAULT 工作吗?编辑:没有 nvm 不起作用。
  • 我非常怀疑 :-) - 但如果这样的事情是可能的 - 这很可能是语法。
  • 部分回答您的问题:是的 - 这是可能的,但它不是“更有效”。您需要查询information_schema
  • 提高效率的目的是什么?

标签: mysql search default-value


【解决方案1】:

这不是一个答案,但我认为这很有趣,我可以看到如果这个 WHERE Type IS DEFAULT 确实存在,它是有用的。

动态的东西;无需在WHERE 条件中显式定义默认值。

我正在详细说明 Paul 关于查询 information_schema 的评论,查询可能如下所示:

SELECT * FROM example1 A INNER JOIN 
        (SELECT column_default 
         FROM information_schema.columns 
         WHERE table_schema='test' 
         AND table_name='example1') B
ON A.Val=B.column_default;

它更长,而不是显式定义默认值,我必须定义 table_schema 和 table_name;事实证明,这远非动态的。我也准备了一把小提琴https://www.db-fiddle.com/f/8idH1J7PnyvRwU8tQhyzMb/0

【讨论】:

  • 这绝对符合动态部分的条件,但它仍然没有超过比较字符串本身的需要。我认为这可能会在默认值本身是动态的情况下失败,例如将当前日期作为默认值的列。
  • 在尝试提出这个示例时,我也在考虑当前日期默认值。老实说,我会说这是最明确的默认值,您肯定会在某个时候将一列分配给当前日期作为默认值。但是,我认为在您的情况或尝试中,您不会期望以当前日期值作为默认值查询任何列,因为information_schema.columns 中的column_defaultcurrent_timestamp 作为默认值而不是日期本身。 . 除非您的默认日期值是固定的,例如“2020-01-01”
  • 如果他们也将其存储为current_timestamp 用于内部某处使用默认值的每条记录...
  • 我同意你的看法.. 我重申它可能会派上用场.. 好吧,如果它现在存在,它会非常适合你的情况 xD
猜你喜欢
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多