Mysql 、Order by子句不在“选择列表”中
我正在努力创建自己的自动增量块。你能帮我重新组织下面的示例吗?适用于IF布尔表达式中的TRUE,不适用于FALSE 3065-order by子句的表达式1不在select list references列中…我在Web上发现了一些解决方案,但我无法在我的示例中实现它们。我希望避免使用c挂起任何更深层次的东西,如sql_mode=和其他。 例如:Mysql 、Order by子句不在“选择列表”中,mysql,sql-order-by,distinct,Mysql,Sql Order By,Distinct,我正在努力创建自己的自动增量块。你能帮我重新组织下面的示例吗?适用于IF布尔表达式中的TRUE,不适用于FALSE 3065-order by子句的表达式1不在select list references列中…我在Web上发现了一些解决方案,但我无法在我的示例中实现它们。我希望避免使用c挂起任何更深层次的东西,如sql_mode=和其他。 例如: SET temp_id:=从日常_操作中选择MAXid+1;IMHO更好。在任何情况下,该方法都不是线程安全的:对于多个并发请求,您将具有相同的tem
SET temp_id:=从日常_操作中选择MAXid+1;IMHO更好。在任何情况下,该方法都不是线程安全的:对于多个并发请求,您将具有相同的temp_id。这一点很好。那么在这种情况下,常见的模式是什么?常见的模式是什么?您应该使用自动增量、GUID或锁表。您的问题不清楚是什么在您尝试这样做时,没有任何建议。我正在编写一个自动递增复合键的过程,这就是我不使用内置选项的原因。在最后的评论中,我指的是如何在这种情况下正确防止多个并发请求,但这会导致其他主题。我将搜索它。谢谢。
DECLARE temp_id INT;
IF NOT EXISTS(SELECT 1 FROM operation_table WHERE client_id = 'some client') THEN
SET temp_id := 1;
ELSE
SET temp_id := (SELECT DISTINCT id FROM daily_operation ORDER BY id DESC LIMIT 1) + 1;
END IF;
SET id := temp_id;