Site updated: 2023-05-25 18:38:45
This commit is contained in:
1 parent
3e7faed94c
commit
9f8985fdef
163 files changed
+305
-330
No files matched your search
@@ -10,8 +10,8 @@
|
||||
</author>
|
||||
<description>天生我材必有用</description>
|
||||
<language>zh-CN</language>
|
||||
<pubDate>Sun, 16 Apr 2023 13:32:00 +0800</pubDate>
|
||||
<lastBuildDate>Sun, 16 Apr 2023 13:32:00 +0800</lastBuildDate>
|
||||
<pubDate>Thu, 25 May 2023 18:25:00 +0800</pubDate>
|
||||
<lastBuildDate>Thu, 25 May 2023 18:25:00 +0800</lastBuildDate>
|
||||
<category term="hito" />
|
||||
<category term="無言" />
|
||||
<category term="博客" />
|
||||
@@ -20,6 +20,65 @@
|
||||
<category term="心得体会" />
|
||||
<category term="技术分享" />
|
||||
<category term="踩坑" />
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2023/05/25/%E8%A7%A3%E5%86%B3MySQL%E6%8A%A5only-full-group-by%E9%94%99%E8%AF%AF/</guid>
|
||||
<title>解决MySQL报only_full_group_by错误</title>
|
||||
<link>https://hitoli.com/2023/05/25/%E8%A7%A3%E5%86%B3MySQL%E6%8A%A5only-full-group-by%E9%94%99%E8%AF%AF/</link>
|
||||
<category term="工作" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/" />
|
||||
<category term="解决问题" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" />
|
||||
<category term="mysql" scheme="https://hitoli.com/tags/mysql/" />
|
||||
<pubDate>Thu, 25 May 2023 18:25:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="问题描述"><a class="anchor" href="#问题描述">#</a> 问题描述</h4>
|
||||
<p>当我们迁移到 MySQL 5.7+ 的版本时,常会碰到 ERROR 1055 only_full_group_by 错误,这是 5.7 之后 SQL_MODE 默认打开了严格模式导致的错误。说明你代码里有地方写的不严谨。</p>
|
||||
<h4 id="解决方法"><a class="anchor" href="#解决方法">#</a> 解决方法</h4>
|
||||
<ol>
|
||||
<li>重写 sql</li>
|
||||
<li>返回宽松模式</li>
|
||||
</ol>
|
||||
<figure class="highlight sql"><figcaption data-lang="SQL"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#查询 sql_mode</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">select</span> @<span class="token variable">@GLOBAL.sql_mode</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token comment">#删除 ONLY_FULL_GROUP_BY</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment">#设置 sql_mode</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">set</span> @<span class="token variable">@GLOBAL.sql_mode</span><span class="token operator">=</span><span class="token string">'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'</span><span class="token punctuation">;</span></pre></td></tr></table></figure><ol start="3">
|
||||
<li>使用聚合函数<br />
|
||||
如果某些特别的原因就是要查询未分组字段,但你又没空改代码,那么我们可使用聚合函数来规避这类错误,算是一种折中的方案了,语法改严谨了,代码又不需要大动。如 ANY_VALUE ()、MAX ()、MIN () 或者 GROUP_CONCAT () 等聚合函数。</li>
|
||||
</ol>
|
||||
]]></description>
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2023/05/25/MySQL%E4%B8%AD%E7%9A%84any-value-%E5%87%BD%E6%95%B0/</guid>
|
||||
<title>MySQL中的any_value()函数</title>
|
||||
<link>https://hitoli.com/2023/05/25/MySQL%E4%B8%AD%E7%9A%84any-value-%E5%87%BD%E6%95%B0/</link>
|
||||
<category term="工作" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/" />
|
||||
<category term="解决问题" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" />
|
||||
<category term="mysql" scheme="https://hitoli.com/tags/mysql/" />
|
||||
<pubDate>Thu, 25 May 2023 18:07:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="问题"><a class="anchor" href="#问题">#</a> 问题</h4>
|
||||
<p>业务要求:查询所有省份:<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2023/05/25/778f34f5670d.png" alt="" /></p>
|
||||
<h4 id="方法"><a class="anchor" href="#方法">#</a> 方法</h4>
|
||||
<ol>
|
||||
<li>distinct 排除重复</li>
|
||||
</ol>
|
||||
<figure class="highlight sql"><figcaption data-lang="SQL"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">SELECT</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">DISTINCT</span><span class="token punctuation">(</span>province_code<span class="token punctuation">)</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="3"></td><td><pre> province_name</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">FROM</span></pre></td></tr><tr><td data-num="5"></td><td><pre> t_mip_base_area</pre></td></tr></table></figure><ol start="2">
|
||||
<li>group by 根据身份编码分组</li>
|
||||
</ol>
|
||||
<figure class="highlight sql"><figcaption data-lang="SQL"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">SELECT</span> </pre></td></tr><tr><td data-num="2"></td><td><pre> province_code<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="3"></td><td><pre> any_value<span class="token punctuation">(</span>province_name<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">FROM</span> t_mip_base_area</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> province_code</pre></td></tr></table></figure><h6 id="若这样写"><a class="anchor" href="#若这样写">#</a> 若这样写</h6>
|
||||
<figure class="highlight sql"><figcaption data-lang="SQL"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">SELECT</span> </pre></td></tr><tr><td data-num="2"></td><td><pre> province_code<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="3"></td><td><pre> province_name</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">FROM</span> t_mip_base_area</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> province_code</pre></td></tr></table></figure><p>则会报错<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2023/05/25/c57a8e811928.png" alt="" /></p>
|
||||
<h4 id="总结"><a class="anchor" href="#总结">#</a> 总结:</h4>
|
||||
<ol>
|
||||
<li>
|
||||
<p>MySQL5.7 之后,sql_mode 中 ONLY_FULL_GROUP_BY 模式默认设置为打开状态。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>ONLY_FULL_GROUP_BY 的语义就是确定 select target list 中的所有列的值都是明确语义,简单的说来,在此模式下,target list 中的值要么是来自于聚合函数(sum、avg、max 等)的结果,要么是来自于 group by list 中的表达式的值</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>MySQL 提供了 any_value () 函数来抑制 ONLY_FULL_GROUP_BY 值被拒绝</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>any_value () 会选择被分到同一组的数据里第一条数据的指定列值作为返回数据</p>
|
||||
</li>
|
||||
</ol>
|
||||
]]></description>
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2023/04/16/%E5%91%BD%E4%BB%A4%E5%A4%A7%E6%9D%82%E7%83%A9/</guid>
|
||||
<title>命令大杂烩</title>
|
||||
@@ -630,78 +689,5 @@
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">rm</span> dist <span class="token parameter variable">-fr</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">yarn</span> build</pre></td></tr></table></figure> ]]></description>
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2022/11/03/%E4%B8%8A%E7%8F%AD%E4%BA%86/</guid>
|
||||
<title>上班了</title>
|
||||
<link>https://hitoli.com/2022/11/03/%E4%B8%8A%E7%8F%AD%E4%BA%86/</link>
|
||||
<category term="生活" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/" />
|
||||
<category term="心情" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/%E5%BF%83%E6%83%85/" />
|
||||
<category term="心情" scheme="https://hitoli.com/tags/%E5%BF%83%E6%83%85/" />
|
||||
<pubDate>Thu, 03 Nov 2022 11:25:00 +0800</pubDate>
|
||||
<description><![CDATA[ <ul>
|
||||
<li>终于又上班了。O (∩_∩) O~</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2022/11/02/2-dev-null%E5%92%8C-dev-null-2-1%E5%92%8C2-1-dev-null%E7%9A%84%E5%8C%BA%E5%88%AB/</guid>
|
||||
<title>2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别</title>
|
||||
<link>https://hitoli.com/2022/11/02/2-dev-null%E5%92%8C-dev-null-2-1%E5%92%8C2-1-dev-null%E7%9A%84%E5%8C%BA%E5%88%AB/</link>
|
||||
<category term="Linux" scheme="https://hitoli.com/categories/Linux/" />
|
||||
<category term="Shell" scheme="https://hitoli.com/categories/Linux/Shell/" />
|
||||
<category term="Shell" scheme="https://hitoli.com/tags/Shell/" />
|
||||
<category term="2>&1" scheme="https://hitoli.com/tags/2-1/" />
|
||||
<pubDate>Wed, 02 Nov 2022 16:29:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="区别"><a class="anchor" href="#区别">#</a> 区别:</h4>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token operator"><span class="token file-descriptor important">2</span>></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出到 “黑洞”</p>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token operator">></span>/dev/null <span class="token operator"><span class="token file-descriptor important">2</span>></span><span class="token file-descriptor important">&amp;1</span></pre></td></tr></table></figure><p>默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”</p>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token operator"><span class="token file-descriptor important">2</span>></span><span class="token file-descriptor important">&amp;1</span> <span class="token operator">></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕</p>
|
||||
<h4 id="解释"><a class="anchor" href="#解释">#</a> 解释:</h4>
|
||||
<ol>
|
||||
<li>
|
||||
<p>文件描述符<br />
|
||||
Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:<br />
|
||||
0—— 标准输入(stdin)<br />
|
||||
略...<br />
|
||||
1—— 标准输出(stdout)<br />
|
||||
在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2022/11/01/newscreen629761046.jpg" alt="" /><br />
|
||||
2—— 标准错误(stderr)<br />
|
||||
在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2022/11/01/newscreen629793578.jpg" alt="" /></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>重定向<br />
|
||||
重定向的符号有两个:&gt; 或 &gt;&gt;,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:</p>
|
||||
</li>
|
||||
</ol>
|
||||
<ul>
|
||||
<li>
|
||||
<p>重定向标准输出 stdout<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2022/11/01/newscreen630033531.jpg" alt="" /><br />
|
||||
如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>重定向标准错误 stderr<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2022/11/01/newscreen630256640.jpg" alt="" /><br />
|
||||
如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件</p>
|
||||
</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">ls</span> b.txt <span class="token operator"><span class="token file-descriptor important">2</span>></span> stderr.txt <span class="token operator"><span class="token file-descriptor important">1</span>></span>stdout.txt</pre></td></tr></table></figure><ul>
|
||||
<li>也可以将 stderr 和 stdout 重定向到同一个文件</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">ls</span> b.txt <span class="token operator">></span> output.txt <span class="token operator"><span class="token file-descriptor important">2</span>></span><span class="token file-descriptor important">&amp;1</span></pre></td></tr></table></figure><ul>
|
||||
<li>或采用下面的方法,可以少写几个字,能达到同样的效果</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">ls</span> b.txt <span class="token operator">&amp;></span> output.txt</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">ls</span> b.txt <span class="token operator">>&amp;</span> output.txt <span class="token comment">#两个表达式效果一样的</span></pre></td></tr></table></figure><ol start="3">
|
||||
<li>Linux 特殊文件<br />
|
||||
/dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。<br />
|
||||
所以,2&gt;/dev/null 的意思就是将标准错误 stderr 删掉。</li>
|
||||
</ol>
|
||||
]]></description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
Reference in new issue
Block a user