-1
timestamp  column_a column_b
2020       4        alpha
2019       5        ''
2018       ''       beta
2017       8        -1
2016       -1       theta

我正在尝试在频繁更新 mysql 数据库时使用 NULLIF() 替换值。为了减少我处理的记录数量,我想找出最后一个空或-1时间戳。在这种情况下,我想替换任何空字符串并将 -1 替换为 None。答案是 2016 年。在这种情况下,找到最后一个时间戳为 -1 的最佳方法是什么?是否有更好的替代方法可以将 Mysql 中的 value 替换为 None ?

4

1 回答 1

0

您的问题不是很清楚,这可能是由您的示例数据引起的,其中列包含数字和空字符串。

据我了解,您想用 null 替换某些字符串(即空字符串和'-1')。您希望经常这样做,因为数据一直添加到表中,并且您想关心那些“无效”条目。您担心性能并希望您能以某种方式让 DBMS 只查看新行,因此每次更新时不要读取整个表。

当您在列中显示一个空字符串时,我想该列的类型是字符串类型(例如VARCHAR)。因此,我认为首先要考虑的是,您是否希望 此列成为字符串。如果它是一个数字列(例如INT),则不会有空字符串开始。此外,-1 总是相同的数字,而字符串可以有前导或尾随空格或特殊字符,您看不到。

然后,您似乎认为 -1 不受欢迎或无效。那么,为什么允许输入呢?有两种方法可以避免此类条目:

  1. 检查约束在插入无效数据时引发异常。
  2. 将无效值自动更改为有效值的触发器。

使用这两种方法中的任何一种,您都不会再在表中包含无效数据,并且无需运行修复更新。

于 2020-04-15T06:30:19.103 回答