【问题标题】:MySQL inserting with select max(`Column`)+1 on possibly empty resultsMySQL 在可能为空的结果上插入 select max(`Column`)+1
【发布时间】:2017-03-23 17:10:14
【问题描述】:

我已经看到很多与我类似的问题,但它们与我的问题并不完全相同。

这是我的查询:

insert into`quotes`(`QuoteID`,`QuoteRequestID`,`Number`,`UserID`,`Viewed`,
    `_Latest`)
select uuid(),uuid(),
ifnull(max(`quotes`.`Number`),0)+1,'Some User ID',1,1 
from`quotes`
join`quoterequests`using(`QuoteRequestID`)
where`quoterequests`.`UserID`='Some User Other ID';

这是我得到的错误:

错误代码:1048。列 'QuoteID' 不能为空

所以我的猜测是 select 语句没有返回任何内容,但既然我在查询中使用了max(),那怎么可能呢?

果然,如果我删除了insert 部分并自己运行 select 语句,那么我确实得到了预期的结果,以及新的 UUID(绝对不是空值)等等。这里发生了什么?这是 MySQL 的错误吗?我的 MySQL 版本是 5.7.14;


编辑

所以我已经弄清楚如果我将选择包装在另一个选择中,它现在可以按预期工作。不确定这是解决方案还是解决方法,但它确实让我的查询正常工作。

【问题讨论】:

  • 您的查询在 uuid() 函数中返回空值的行...检查 uuid() 函数
  • @scaisEdge uuid() 函数绝对不会返回 null,它是一个返回唯一标识符的内置函数。另外,我在帖子正文中指定我检查了没有插入的 select 语句的输出,我得到了我正在寻找的结果

标签: mysql select insert


【解决方案1】:

看起来您可能有一些触发器会产生错误 - 这是我能想到的唯一解释。

【讨论】:

  • 查询中的任何表都没有触发器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
相关资源
最近更新 更多