<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>175米</title><link>https://www.175.run/</link><description>Less is More !</description><item><title>前端本地存储数据库IndexedDB</title><link>https://www.175.run/post/11.html</link><description>&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;&lt;p&gt;在人们的印象中，可能觉得只有做后端的小伙伴才会接触到数据库。其实在前端的领域里面也有数据库，只是可能用的比较少，因为前端存储方案有很多，比如cookie、sessionstorage等等。&lt;/p&gt;&lt;p&gt;在浏览器上有两种数据库：webSQL和IndexedDB。但是如果在浏览器上需要用到数据库一般会使用Indexed DB数据库，webSQL基本上已经废弃了，具体原因小伙伴可以下来自己查查，今天主要就讲解Indexed DB数据库的使用。&lt;/p&gt;&lt;h2 data-id=&quot;heading-1&quot;&gt;1.IndexedDB简介&lt;/h2&gt;&lt;p&gt;MDN官网是这样解释Indexed DB的：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;IndexedDB 是一种底层 API，用于在客户端存储大量的结构化数据（也包括文件/二进制大型对象（blobs））。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用，但对于存储更大量的结构化数据来说力不从心。而 IndexedDB 提供了这种场景的解决方案。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;官网上的这句话也很简单明了，意思就是IndexedDB主要用来客户端存储大量数据而生的，我们都知道cookie、localstorage等存储方式都有存储大小限制。如果数据量很大，且都需要客户端存储时，那么就可以使用IndexedDB数据库。&lt;/p&gt;&lt;p&gt;客户端各存储方式对比：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b50dd9b052e4dde934c217fa1c1ca01~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp&quot; alt=&quot;&quot; loading=&quot;lazy&quot;/&gt;&lt;/p&gt;&lt;h2 data-id=&quot;heading-2&quot;&gt;2.IndexedDB使用场景&lt;/h2&gt;&lt;p&gt;所有的场景都基于客户端需要存储大量数据的前提下：&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;数据可视化等界面，大量数据，每次请求会消耗很大性能。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;即时聊天工具，大量消息需要存在本地。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;其它存储方式容量不满足时，不得已使用IndexedDB&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 data-id=&quot;heading-3&quot;&gt;3.IndexedDB特点&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;（1） 非关系型数据库(NoSql)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们都知道MySQL等数据库都是关系型数据库，它们的主要特点就是数据都以一张二维表的形式存储，而Indexed DB是非关系型数据库，主要以键值对的形式存储数据。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（2）持久化存储&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;cookie、localStorage、sessionStorage等方式存储的数据当我们清楚浏览器缓存后，这些数据都会被清除掉的，而使用IndexedDB存储的数据则不会，除非手动删除该数据库。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（3）异步操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;IndexedDB操作时不会锁死浏览器，用户依然可以进行其他的操作，这与localstorage形成鲜明的对比，后者是同步的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（4）支持事务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;IndexedDB支持事务(transaction)，这意味着一系列的操作步骤之中，只要有一步失败了，整个事务都会取消，数据库回滚的事务发生之前的状态，这和MySQL等数据库的事务类似。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（6）同源策略&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;IndexedDB同样存在同源限制，每个数据库对应创建它的域名。网页只能访问自身域名下的数据库，而不能访问跨域的数据库。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（7）存储容量大&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这也是IndexedDB最显著的特点之一了，这也是不用localStorage等存储方式的最好理由。&lt;/p&gt;&lt;h2 data-id=&quot;heading-4&quot;&gt;4.IndexedDB重要概念讲解&lt;/h2&gt;&lt;h3 data-id=&quot;heading-5&quot;&gt;4.1仓库objectStore&lt;/h3&gt;&lt;p&gt;IndexedDB没有表的概念，它只有仓库store的概念，大家可以把仓库理解为表即可，即一个store是一张表。&lt;/p&gt;&lt;h3 data-id=&quot;heading-6&quot;&gt;4.2索引index&lt;/h3&gt;&lt;p&gt;在关系型数据库当中也有索引的概念，我们可以给对应的表字段添加索引，以便加快查找速率。在IndexedDB中同样有索引，我们可以在创建store的时候同时创建索引，在后续对store进行查询的时候即可通过索引来筛选，给某个字段添加索引后，在后续插入数据的过成功，索引字段便不能为空。&lt;/p&gt;&lt;h3 data-id=&quot;heading-7&quot;&gt;4.3游标cursor&lt;/h3&gt;&lt;p&gt;游标是IndexedDB数据库新的概念，大家可以把游标想象为一个指针，比如我们要查询满足某一条件的所有数据时，就需要用到游标，我们让游标一行一行的往下走，游标走到的地方便会返回这一行数据，此时我们便可对此行数据进行判断，是否满足条件。&lt;/p&gt;&lt;p&gt;【注意】：IndexedDB查询不像MySQL等数据库方便，它只能通过主键、索引、游标方式查询数据。&lt;/p&gt;&lt;h3 data-id=&quot;heading-8&quot;&gt;4.4事务&lt;/h3&gt;&lt;p&gt;IndexedDB支持事务，即对数据库进行操作时，只要失败了，都会回滚到最初始的状态，确保数据的一致性。&lt;/p&gt;&lt;h2 data-id=&quot;heading-9&quot;&gt;5.IndexedDB实操&lt;/h2&gt;&lt;p&gt;IndexedDB所有针对仓库的操作都是基于事务的。&lt;/p&gt;&lt;h3 data-id=&quot;heading-10&quot;&gt;5.1创建或连接数据库&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;打开数据库&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;dbName&amp;nbsp;数据库的名字&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;version&amp;nbsp;数据库的版本&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;{object}&amp;nbsp;该函数会返回一个数据库实例&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;openDB(dbName,&amp;nbsp;version&amp;nbsp;=&amp;nbsp;1)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;new&amp;nbsp;Promise((resolve,&amp;nbsp;reject)&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;兼容浏览器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;indexedDB&amp;nbsp;=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.indexedDB&amp;nbsp;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.mozIndexedDB&amp;nbsp;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.webkitIndexedDB&amp;nbsp;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.msIndexedDB;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;db;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;打开数据库，若没有则会创建&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;request&amp;nbsp;=&amp;nbsp;indexedDB.open(dbName,&amp;nbsp;version);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;数据库打开成功回调&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db&amp;nbsp;=&amp;nbsp;event.target.result;&amp;nbsp;//&amp;nbsp;数据库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据库打开成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resolve(db);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;数据库打开失败的回调&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据库打开报错&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;数据库有更新时候的回调&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onupgradeneeded&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;数据库创建或升级的时候会触发&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;onupgradeneeded&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db&amp;nbsp;=&amp;nbsp;event.target.result;&amp;nbsp;//&amp;nbsp;数据库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;objectStore;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;创建存储库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objectStore&amp;nbsp;=&amp;nbsp;db.createObjectStore(&amp;quot;signalChat&amp;quot;,&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyPath:&amp;nbsp;&amp;quot;sequenceId&amp;quot;,&amp;nbsp;//&amp;nbsp;这是主键&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;autoIncrement:&amp;nbsp;true&amp;nbsp;//&amp;nbsp;实现自增&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;创建索引，在后面查询数据的时候可以根据索引查&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objectStore.createIndex(&amp;quot;link&amp;quot;,&amp;nbsp;&amp;quot;link&amp;quot;,&amp;nbsp;{&amp;nbsp;unique:&amp;nbsp;false&amp;nbsp;});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objectStore.createIndex(&amp;quot;sequenceId&amp;quot;,&amp;nbsp;&amp;quot;sequenceId&amp;quot;,&amp;nbsp;{&amp;nbsp;unique:&amp;nbsp;false&amp;nbsp;});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objectStore.createIndex(&amp;quot;messageType&amp;quot;,&amp;nbsp;&amp;quot;messageType&amp;quot;,&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique:&amp;nbsp;false,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;});&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;我们将创建数据库的操作封装成了一个函数，并且该函数返回一个promise对象，使得在调用的时候可以链式调用，函数主要接收两个参数：数据库名称、数据库版本。函数内部主要有三个回调函数，分别是：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;onsuccess&lt;/strong&gt;：数据库打开成功或者创建成功后的回调，这里我们将数据库实例返回了出去。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;onerror&lt;/strong&gt;：数据库打开或创建失败后的回调。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;onupgradeneeded&lt;/strong&gt;：当数据库版本有变化的时候会执行该函数，比如我们想创建新的存储库（表），就可以在该函数里面操作，更新数据库版本即可。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-id=&quot;heading-11&quot;&gt;5.2插入数据&lt;/h3&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;新增数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;data&amp;nbsp;数据&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;addData(db,&amp;nbsp;storeName,&amp;nbsp;data)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.transaction([storeName],&amp;nbsp;&amp;quot;readwrite&amp;quot;)&amp;nbsp;//&amp;nbsp;事务对象&amp;nbsp;指定表格名称和操作模式（&amp;quot;只读&amp;quot;或&amp;quot;读写&amp;quot;）&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.objectStore(storeName)&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add(data);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据写入成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据写入失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;IndexedDB插入数据需要通过事务来进行操作，插入的方法也很简单，利用IndexedDB提供的add方法即可，这里我们同样将插入数据的操作封装成了一个函数，接收三个参数，分别如下：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;db：在创建或连接数据库时，返回的db实例，需要那个时候保存下来。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;storeName：仓库名称(或者表名)，在创建或连接数据库时我们就已经创建好了仓库。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;data：需要插入的数据，通常是一个对象&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;**【注意】：**插入的数据是一个对象，而且必须包含我们声明的索引键值对。&lt;/p&gt;&lt;h3 data-id=&quot;heading-12&quot;&gt;5.3通过主键读取数据&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过主键读取数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;key&amp;nbsp;主键值&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;getDataByKey(db,&amp;nbsp;storeName,&amp;nbsp;key)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;new&amp;nbsp;Promise((resolve,&amp;nbsp;reject)&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;transaction&amp;nbsp;=&amp;nbsp;db.transaction([storeName]);&amp;nbsp;//&amp;nbsp;事务&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;objectStore&amp;nbsp;=&amp;nbsp;transaction.objectStore(storeName);&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;objectStore.get(key);&amp;nbsp;//&amp;nbsp;通过主键获取数据&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;事务失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;主键查询结果:&amp;nbsp;&amp;quot;,&amp;nbsp;request.result);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resolve(request.result);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;});&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;主键即刚刚我们在创建数据库时声明的keyPath，通过主键只能查询出一条数据。&lt;/p&gt;&lt;h3 data-id=&quot;heading-13&quot;&gt;5.4通过游标查询数据&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过游标读取数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;cursorGetData(db,&amp;nbsp;storeName)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;list&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;store&amp;nbsp;=&amp;nbsp;db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.transaction(storeName,&amp;nbsp;&amp;quot;readwrite&amp;quot;)&amp;nbsp;//&amp;nbsp;事务&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.objectStore(storeName);&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;store.openCursor();&amp;nbsp;//&amp;nbsp;指针对象&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;游标开启成功，逐行读数据&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;cursor&amp;nbsp;=&amp;nbsp;e.target.result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cursor)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;必须要检查&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.push(cursor.value);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor.continue();&amp;nbsp;//&amp;nbsp;遍历了存储对象中的所有内容&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;游标读取的数据：&amp;quot;,&amp;nbsp;list);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上面函数开启了一个游标，然后逐行读取数据，存入数组，最终得到整个仓库的所有数据。&lt;/p&gt;&lt;h3 data-id=&quot;heading-14&quot;&gt;5.5通过索引查询数据&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;ini复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过索引读取数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexName&amp;nbsp;索引名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexValue&amp;nbsp;索引值&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;getDataByIndex(db,&amp;nbsp;storeName,&amp;nbsp;indexName,&amp;nbsp;indexValue)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;store&amp;nbsp;=&amp;nbsp;db.transaction(storeName,&amp;nbsp;&amp;quot;readwrite&amp;quot;).objectStore(storeName);&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;store.index(indexName).get(indexValue);&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;事务失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;result&amp;nbsp;=&amp;nbsp;e.target.result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;索引查询结果：&amp;quot;,&amp;nbsp;result);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;索引名称即我们创建仓库的时候创建的索引名称，也就是键值对中的键，最终会查询出所有满足我们传入函数索引值的数据。&lt;/p&gt;&lt;h3 data-id=&quot;heading-15&quot;&gt;5.6通过索引和游标查询数据&lt;/h3&gt;&lt;p&gt;通过5.4节和5.5节我们发现，单独通过索引或者游标查询出的数据都是部分或者所有数据，如果我们想要查询出索引中满足某些条件的所有数据，那么单独使用索引或游标是无法实现的。当然，你也可以查询出所有数据之后在循环数组筛选出合适的数据，但是这不是最好的实现方式，最好的方式当然是将索引和游标结合起来。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过索引和游标查询记录&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexName&amp;nbsp;索引名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexValue&amp;nbsp;索引值&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;cursorGetDataByIndex(db,&amp;nbsp;storeName,&amp;nbsp;indexName,&amp;nbsp;indexValue)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;list&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;store&amp;nbsp;=&amp;nbsp;db.transaction(storeName,&amp;nbsp;&amp;quot;readwrite&amp;quot;).objectStore(storeName);&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;store&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.index(indexName)&amp;nbsp;//&amp;nbsp;索引对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.openCursor(IDBKeyRange.only(indexValue));&amp;nbsp;//&amp;nbsp;指针对象&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;cursor&amp;nbsp;=&amp;nbsp;e.target.result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cursor)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;必须要检查&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.push(cursor.value);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor.continue();&amp;nbsp;//&amp;nbsp;遍历了存储对象中的所有内容&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;游标索引查询结果：&amp;quot;,&amp;nbsp;list);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上面函数接收四个参数，分别是：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;db：数据库实例&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;storeName：仓库名&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;indexName：索引名称&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;indexName：索引值&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;利用索引和游标结合查询，我们可以查询出索引值满足我们传入函数值的所有数据对象，而不是之查询出一条数据或者所有数据。&lt;/p&gt;&lt;h3 data-id=&quot;heading-16&quot;&gt;5.7通过索引和游标分页查询&lt;/h3&gt;&lt;p&gt;IndexedDB分页查询不像MySQL分页查询那么简单，没有提供现成的API，如limit等，所以需要我们自己实现分页。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;ini复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过索引和游标分页查询记录&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexName&amp;nbsp;索引名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexValue&amp;nbsp;索引值&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{number}&amp;nbsp;page&amp;nbsp;页码&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{number}&amp;nbsp;pageSize&amp;nbsp;查询条数&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;cursorGetDataByIndexAndPage(&amp;nbsp;&amp;nbsp;&amp;nbsp;db,&amp;nbsp;&amp;nbsp;&amp;nbsp;storeName,&amp;nbsp;&amp;nbsp;&amp;nbsp;indexName,&amp;nbsp;&amp;nbsp;&amp;nbsp;indexValue,&amp;nbsp;&amp;nbsp;&amp;nbsp;page,&amp;nbsp;&amp;nbsp;&amp;nbsp;pageSize&amp;nbsp;)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;list&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;counter&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;//&amp;nbsp;计数器&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;advanced&amp;nbsp;=&amp;nbsp;true;&amp;nbsp;//&amp;nbsp;是否跳过多少条查询&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;store&amp;nbsp;=&amp;nbsp;db.transaction(storeName,&amp;nbsp;&amp;quot;readwrite&amp;quot;).objectStore(storeName);&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;store&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.index(indexName)&amp;nbsp;//&amp;nbsp;索引对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.openCursor(IDBKeyRange.only(indexValue));&amp;nbsp;//&amp;nbsp;指针对象&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;cursor&amp;nbsp;=&amp;nbsp;e.target.result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(page&amp;nbsp;&amp;gt;&amp;nbsp;1&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;advanced)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;advanced&amp;nbsp;=&amp;nbsp;false;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor.advance((page&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;*&amp;nbsp;pageSize);&amp;nbsp;//&amp;nbsp;跳过多少条&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cursor)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;必须要检查&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.push(cursor.value);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(counter&amp;nbsp;&amp;lt;&amp;nbsp;pageSize)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor.continue();&amp;nbsp;//&amp;nbsp;遍历了存储对象中的所有内容&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor&amp;nbsp;=&amp;nbsp;null;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;分页查询结果&amp;quot;,&amp;nbsp;list);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;分页查询结果&amp;quot;,&amp;nbsp;list);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这里用到了IndexedDB的一个API：advance。该函数可以让我们的游标跳过多少条开始查询。假如我们的额分页是每页10条数据，现在需要查询第2页，那么我们就需要跳过前面10条数据，从11条数据开始查询，直到计数器等于10，那么我们就关闭游标，结束查询。&lt;/p&gt;&lt;h3 data-id=&quot;heading-17&quot;&gt;5.8更新数据&lt;/h3&gt;&lt;p&gt;IndexedDB更新数据较为简单，直接使用put方法，值得注意的是如果数据库中没有该条数据，则会默认增加该条数据，否则更新。有些小伙伴喜欢更新和新增都是用put方法，这也是可行的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;更新数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;data&amp;nbsp;数据&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;updateDB(db,&amp;nbsp;storeName,&amp;nbsp;data)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.transaction([storeName],&amp;nbsp;&amp;quot;readwrite&amp;quot;)&amp;nbsp;//&amp;nbsp;事务对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.objectStore(storeName)&amp;nbsp;//&amp;nbsp;仓库对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.put(data);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据更新成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据更新失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;put方法接收一个数据对象。&lt;/p&gt;&lt;h3 data-id=&quot;heading-18&quot;&gt;5.9通过主键删除数据&lt;/h3&gt;&lt;p&gt;主键即我们创建数据库时申明的keyPath，它是唯一的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过主键删除数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;id&amp;nbsp;主键值&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;deleteDB(db,&amp;nbsp;storeName,&amp;nbsp;id)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.transaction([storeName],&amp;nbsp;&amp;quot;readwrite&amp;quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.objectStore(storeName)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delete(id);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据删除成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据删除失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;该种删除只能删除一条数据，必须传入主键。&lt;/p&gt;&lt;h3 data-id=&quot;heading-19&quot;&gt;5.10通过索引和游标删除指定数据&lt;/h3&gt;&lt;p&gt;有时候我们拿不到主键值，只能只能通过索引值来删除，通过这种方式，我们可以删除一条数据（索引值唯一）或者所有满足条件的数据（索引值不唯一）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;ini复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过索引和游标删除指定的数据&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;storeName&amp;nbsp;仓库名称&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{string}&amp;nbsp;indexName&amp;nbsp;索引名&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;indexValue&amp;nbsp;索引值&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;cursorDelete(db,&amp;nbsp;storeName,&amp;nbsp;indexName,&amp;nbsp;indexValue)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;store&amp;nbsp;=&amp;nbsp;db.transaction(storeName,&amp;nbsp;&amp;quot;readwrite&amp;quot;).objectStore(storeName);&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;request&amp;nbsp;=&amp;nbsp;store&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.index(indexName)&amp;nbsp;//&amp;nbsp;索引对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.openCursor(IDBKeyRange.only(indexValue));&amp;nbsp;//&amp;nbsp;指针对象&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;cursor&amp;nbsp;=&amp;nbsp;e.target.result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;deleteRequest;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cursor)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deleteRequest&amp;nbsp;=&amp;nbsp;cursor.delete();&amp;nbsp;//&amp;nbsp;请求删除当前项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deleteRequest.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;游标删除该记录失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deleteRequest.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;游标删除该记录成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cursor.continue();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;request.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上段代码可以删除索引值为indexValue的所有数据，值得注意的是使用了&lt;a href=&quot;https://link.juejin.cn?target=https%3A%2F%2Flink.zhihu.com%2F%3Ftarget%3Dhttps%253A%2F%2Fdeveloper.mozilla.org%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FIDBKeyRange&quot; target=&quot;_blank&quot; title=&quot;https://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/API/IDBKeyRange&quot; ref=&quot;nofollow noopener noreferrer&quot;&gt;IDBKeyRange.only(）&lt;/a&gt;API，该API代表只能当两个值相等时，具体API解释可参考MDN官网。&lt;/p&gt;&lt;h3 data-id=&quot;heading-20&quot;&gt;5.11关闭数据库&lt;/h3&gt;&lt;p&gt;当我们数据库操作完毕后，建议关闭它，节约资源。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;关闭数据库&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;db&amp;nbsp;数据库实例&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;closeDB(db)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;db.close();&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;数据库已关闭&amp;quot;);&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;5.12删除数据库&lt;/p&gt;&lt;p&gt;最后我们需要删库跑路，删除操作也很简单。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;代码如下：&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;javascript复制代码/**&amp;nbsp;&amp;nbsp;*&amp;nbsp;删除数据库&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;{object}&amp;nbsp;dbName&amp;nbsp;数据库名称&amp;nbsp;&amp;nbsp;*/&amp;nbsp;function&amp;nbsp;deleteDBAll(dbName)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(dbName);&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;deleteRequest&amp;nbsp;=&amp;nbsp;window.indexedDB.deleteDatabase(dbName);&amp;nbsp;&amp;nbsp;&amp;nbsp;deleteRequest.onerror&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;删除失败&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;deleteRequest.onsuccess&amp;nbsp;=&amp;nbsp;function&amp;nbsp;(event)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&amp;quot;删除成功&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;};&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-id=&quot;heading-21&quot;&gt;总结&lt;/h2&gt;&lt;p&gt;IndexedDB数据库没有我们想象的那么复杂，了解了它的几个基本概念，上手还是很快的，无非就是增删改查等等，虽然可能开发中用的少，但是了解一下不至于真正用到的时候两眼抓瞎。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;笔者GIthub：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://link.juejin.cn?target=github.com%2FHacker233&quot; target=&quot;_blank&quot; title=&quot;github.com/Hacker233&quot; ref=&quot;nofollow noopener noreferrer&quot;&gt;github.com/Hacker233&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;作者：小猪课堂&lt;br/&gt;链接：https://juejin.cn/post/7026900352968425486&lt;br/&gt;来源：稀土掘金&lt;br/&gt;著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 04 Aug 2023 09:39:41 +0800</pubDate></item><item><title>ubuntu server更改语言为中文</title><link>https://www.175.run/post/10.html</link><description>&lt;p style=&quot;box-sizing: border-box;font-size: medium;color: rgb(77, 77, 77);line-height: 26px;margin: 10px auto;font-family: &amp;#39;PingFang SC&amp;#39;, &amp;#39;Microsoft YaHei&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255)&quot;&gt;1.安装中文语言包&lt;/p&gt;&lt;pre highlighted=&quot;true&quot; has-selection=&quot;true&quot; style=&quot;box-sizing: border-box;transition-duration: 0.2s;transition-property: color, opacity, padding-top, padding-bottom, margin-top, margin-bottom, height;overflow: auto;margin: 10px auto;position: relative;padding: 0.8em;background-color: rgb(40, 44, 52);color: rgb(171, 178, 191);border-radius: 4px&quot;&gt;apt&amp;nbsp;install&amp;nbsp;language-pack-zh-hans&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box;font-size: medium;color: rgb(77, 77, 77);line-height: 26px;margin: 10px auto;font-family: &amp;#39;PingFang SC&amp;#39;, &amp;#39;Microsoft YaHei&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255)&quot;&gt;2.更改默认语言为中文，修改&lt;em style=&quot;box-sizing: border-box&quot;&gt;&lt;strong style=&quot;box-sizing: border-box&quot;&gt;/etc/default/locale&lt;/strong&gt;&lt;/em&gt;文件添加：&lt;/p&gt;&lt;pre highlighted=&quot;true&quot; cnb-code-toolbar-active=&quot;true&quot; has-selection=&quot;true&quot; style=&quot;box-sizing: border-box;transition-duration: 0.2s;transition-property: color, opacity, padding-top, padding-bottom, margin-top, margin-bottom, height;overflow: auto;margin: 10px auto;position: relative;padding: 0.8em;background-color: rgb(40, 44, 52);color: rgb(171, 178, 191);border-radius: 4px&quot;&gt;#&amp;nbsp;vi&amp;nbsp;/etc/default/locale.UTF-8&amp;nbsp;LANGUAGE=zh_CN:zh:en_US:en&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 14 Oct 2022 15:23:17 +0800</pubDate></item><item><title>调整网站名称</title><link>https://www.175.run/post/9.html</link><description>&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.175.run/zb_users/upload/2022/08/202208251661396465507001.png&quot; title=&quot;微信图片_20220825110053.png&quot; alt=&quot;微信图片_20220825110053.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;昨天收到公安备案提醒，今天收到了网站改名提醒。简单做个记录，坚决服从各项整改措施&lt;/p&gt;</description><pubDate>Thu, 25 Aug 2022 10:59:46 +0800</pubDate></item><item><title>crontab的语法规则格式（每分钟、每小时、每天、每周、每月、每年定时执行 规则）</title><link>https://www.175.run/post/8.html</link><description>&lt;p&gt;crontab的语法规则格式：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;代表意义&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;分钟&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;小时&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;日期&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;月份&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;周&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;命令&lt;/p&gt;&lt;p&gt;数字范围&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;0~59&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;0~23&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;1~31&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;1~12&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;0~7&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;需要执行的命令&lt;/p&gt;&lt;p&gt;周的数字为 0 或 7 时，都代表“星期天”的意思。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;另外，还有一些辅助的字符，大概有下面这些：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;特殊字符&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;代表意义&lt;/p&gt;&lt;p&gt;*(星号)&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;代表任何时刻都接受的意思。举例来说，0 12 * * * command 日、月、周都是*，就代表着不论何月、何日的礼拜几的12：00都执行后续命令的意思。&lt;/p&gt;&lt;p&gt;,(逗号)&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;代表分隔时段的意思。举例来说，如果要执行的工作是3：00与6：00时，就会是：0 3,6 * * * command时间还是有五列，不过第二列是 3,6 ，代表3与6都适用&lt;/p&gt;&lt;p&gt;-(减号)&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;代表一段时间范围内，举例来说，8点到12点之间的每小时的20分都进行一项工作：20 8-12 * * * command仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思&lt;/p&gt;&lt;p&gt;/n(斜线)&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;那个n代表数字，即是每隔n单位间隔的意思，例如每五分钟进行一次，则：*/5 * * * * command用*与/5来搭配，也可以写成0-59/5，意思相同&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;1.每分钟定时执行一次规则：&lt;/p&gt;&lt;p&gt;每1分钟执行： */1 * * * *或者* * * * *&lt;/p&gt;&lt;p&gt;每5分钟执行： */5 * * * *&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;2.每小时定时执行一次规则：&lt;/p&gt;&lt;p&gt;每小时执行： 0 * * * *或者0 */1 * * *&lt;/p&gt;&lt;p&gt;每天上午7点执行：0 7 * * *&lt;/p&gt;&lt;p&gt;每天上午7点10分执行：10 7 * * *&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;3.每天定时执行一次规则：&lt;/p&gt;&lt;p&gt;每天执行 0 0 * * *&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;4.每周定时执行一次规则：&lt;/p&gt;&lt;p&gt;每周执行 0 0 * * 0&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;5.每月定时执行一次规则：&lt;/p&gt;&lt;p&gt;每月执行 0 0 1 * *&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;6.每年定时执行一次规则：&lt;/p&gt;&lt;p&gt;每年执行 0 0 1 1 *&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;7.其他例子&lt;/p&gt;&lt;p&gt;5 * * * * 指定每小时的第5分钟执行一次ls命令&lt;/p&gt;&lt;p&gt;30 5 * * * ls 指定每天的 5:30 执行ls命令&lt;/p&gt;&lt;p&gt;30 7 8 * * ls 指定每月8号的7：30分执行ls命令&lt;/p&gt;&lt;p&gt;30 5 8 6 * ls 指定每年的6月8日5：30执行ls命令&lt;/p&gt;&lt;p&gt;30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注：0表示星期天，1表示星期1，以此类推，也可以用英文来表示，sun表示星期天，mon表示星期一等。]&lt;/p&gt;&lt;p&gt;30 3 10,20 * * ls 每月10号及20号的3：30执行ls命令[注：“，”用来连接多个不连续的时段]&lt;/p&gt;&lt;p&gt;25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注：“-”用来连接连续的时段]&lt;/p&gt;&lt;p&gt;*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]&lt;/p&gt;&lt;p&gt;30 6 */10 * * ls 每个月中，每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6：30执行一次ls命令。 ]&lt;/p&gt;&lt;p&gt;————————————————&lt;/p&gt;&lt;p&gt;版权声明：本文为CSDN博主「PeakXin」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。&lt;/p&gt;&lt;p&gt;原文链接：https://blog.csdn.net/xinyflove/article/details/83178876&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 15 Mar 2022 15:11:36 +0800</pubDate></item><item><title>Ubuntu-Server 20.04 安装详细过程(图文)</title><link>https://www.175.run/post/7.html</link><description>&lt;p&gt;前期准备&lt;/p&gt;&lt;p&gt;VMWare + ubuntu-server 20.04 镜像&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;安装&lt;/p&gt;&lt;p&gt;选择语言&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;设置键盘&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;配置动态IP地址&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;设置镜像源地址，这个可以配置阿里云(http://mirrors.aliyun.com/ubuntu/)，下载加速&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;安装 SSH 工具，主要是外部连接该 linux，因为在里面实在太难操作了&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;系统配置完成，安装界面&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;更新完之后出现 reboot 选项&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;登入系统就可以使用了&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;这里再设置一下 root 账户的密码:&lt;/p&gt;&lt;p&gt;sudo passwd&lt;/p&gt;&lt;p&gt;输入密码，确认密码，然后 su root，输入刚刚设置的密码就可以进入了&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;p&gt;2&lt;/p&gt;&lt;p&gt;3&lt;/p&gt;&lt;p&gt;默认情况下，使用 远程连接工具是无法以 root 用户登录的，需要设置一下配置文件&lt;/p&gt;&lt;p&gt;vim /etc/ssh/sshd_config&lt;/p&gt;&lt;p&gt;添加行: PermitRootLogin yes&lt;/p&gt;&lt;p&gt;重启 ssh 服务: service ssh restart&lt;/p&gt;&lt;p&gt;再尝试以 root 账户登录即可正常登录&lt;/p&gt;&lt;p&gt;————————————————&lt;/p&gt;&lt;p&gt;版权声明：本文为CSDN博主「嘎油啊~」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。&lt;/p&gt;&lt;p&gt;原文链接：https://blog.csdn.net/qq_42378797/article/details/110821152&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sat, 12 Feb 2022 17:12:16 +0800</pubDate></item><item><title>mysql json数组插入</title><link>https://www.175.run/post/6.html</link><description>&lt;p&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;UPDATE&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; deals&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; jdeal_status = &lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;CASE&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; JSON_CONTAINS_PATH(jdeal_status, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;one&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;$.trackIssues[0].attachments&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;) &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;WHEN&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: border-box; color: #AE7313; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;THEN&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; JSON_INSERT(jdeal_status, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;$.trackIssues[0].attachments&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, 
 &amp;nbsp; &amp;nbsp;JSON_ARRAY(
 &amp;nbsp; &amp;nbsp; &amp;nbsp;JSON_OBJECT( &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;quot;2020-01-28T12:04:42-05:00&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;yyyy.pdf&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;)
 &amp;nbsp; &amp;nbsp;)
 &amp;nbsp;) &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;ELSE&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt; JSON_ARRAY_APPEND(jdeal_status, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;$.trackIssues[0].attachments&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;,
 &amp;nbsp; &amp;nbsp;JSON_OBJECT( &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;quot;2020-01-28T12:04:42-05:00&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: #7D9726; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;&amp;#39;yyyy.pdf&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #5F5E4E; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre; background-color: #F4F3EC;&quot;&gt;
 &amp;nbsp; &amp;nbsp;)
 &amp;nbsp;) &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: #5F9182; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; white-space: pre;&quot;&gt;END&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 21 Jan 2022 15:57:36 +0800</pubDate></item><item><title>本站换服务器了</title><link>https://www.175.run/post/5.html</link><description>&lt;p&gt;之前的服务器到期&amp;nbsp; ，目前切换到了腾讯云&lt;/p&gt;</description><pubDate>Tue, 11 Jan 2022 15:51:18 +0800</pubDate></item><item><title>使用squid搭建http和https的代理服务器设置指南</title><link>https://www.175.run/post/4.html</link><description>&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;我们曾经在介绍nginx的时候顺便使用nginx做过正向代理的设定，但是如果希望支持https的话，直接使用nginx则较为困难，而使用在这方面术业有专攻的squid则要简单的多。这篇文章用于记录在centos7上安装和设定squid3.5来实现http和https的步骤。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;机器配置&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;uname&amp;nbsp;-a
Linux&amp;nbsp;mail.163.com&amp;nbsp;3.10.0-514.el7.x86_64&amp;nbsp;#1&amp;nbsp;SMP&amp;nbsp;Tue&amp;nbsp;Nov&amp;nbsp;22&amp;nbsp;16:42:41&amp;nbsp;UTC&amp;nbsp;2016&amp;nbsp;x86_64&amp;nbsp;x86_64&amp;nbsp;x86_64&amp;nbsp;GNU/Linux[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;
[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;cat&amp;nbsp;/etc/redhat-release&amp;nbsp;
CentOS&amp;nbsp;Linux&amp;nbsp;release&amp;nbsp;7.3.1611&amp;nbsp;(Core)&amp;nbsp;[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;安装squid&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;安装命令： yum install squid&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;确认版本&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;版本确认： rpm -qa |grep squid&lt;/p&gt;&lt;/blockquote&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;rpm&amp;nbsp;-qa&amp;nbsp;|grep&amp;nbsp;squid
squid-migration-script-3.5.20-12.el7.x86_64
squid-3.5.20-12.el7.x86_64[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;确认ip_forward&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;ip_forward需要设定为1，缺省centos已设定，详细如下：&lt;/p&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;sysctl&amp;nbsp;-a&amp;nbsp;|grep&amp;nbsp;-w&amp;nbsp;ip_forward
net.ipv4.ip_forward&amp;nbsp;=&amp;nbsp;1[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;修改设定文件&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;修改前&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;grep&amp;nbsp;-n&amp;nbsp;&amp;#39;http_access&amp;nbsp;deny&amp;nbsp;all&amp;#39;&amp;nbsp;/etc/squid/squid.conf56:http_access&amp;nbsp;deny&amp;nbsp;all[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;修改后&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;grep&amp;nbsp;-n&amp;nbsp;http&amp;nbsp;/etc/squid/squid.conf&amp;nbsp;|grep&amp;nbsp;-w&amp;nbsp;all56:http_access&amp;nbsp;allow&amp;nbsp;all[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;启动squid&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;systemctl start squid&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;问题1：libssl错误&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;启动squid时提示如下错误&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;code style=&quot;box-sizing: border-box; list-style: inherit; display: inline-block; margin-left: 10px; margin-right: 10px; background-color: rgb(243, 245, 249); border-radius: 0px; padding: 0px 12px; color: rgb(10, 191, 91); font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, &amp;quot;Microsoft Yahei&amp;quot;, monospace; line-height: 20px; word-break: initial; overflow-wrap: break-word;&quot;&gt;squid: relocation error: squid: symbol SSL_set_alpn_protos, version libssl.so.10 not defined in file libssl.so.10 with link time reference&lt;/code&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;原因：未安装openssl&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;对应方法: yum install openssl
 安装之后启动squid即可：&lt;/p&gt;&lt;/blockquote&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;squid[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;systemctl&amp;nbsp;status&amp;nbsp;squid
●&amp;nbsp;squid.service&amp;nbsp;-&amp;nbsp;Squid&amp;nbsp;caching&amp;nbsp;proxy
&amp;nbsp;&amp;nbsp;Loaded:&amp;nbsp;loaded&amp;nbsp;(/usr/lib/systemd/system/squid.service;&amp;nbsp;disabled;&amp;nbsp;vendor&amp;nbsp;preset:&amp;nbsp;disabled)
&amp;nbsp;&amp;nbsp;Active:&amp;nbsp;active&amp;nbsp;(running)&amp;nbsp;since&amp;nbsp;Tue&amp;nbsp;2018-06-05&amp;nbsp;20:07:56&amp;nbsp;CST;&amp;nbsp;8s&amp;nbsp;ago
&amp;nbsp;Process:&amp;nbsp;28548&amp;nbsp;ExecStart=/usr/sbin/squid&amp;nbsp;$SQUID_OPTS&amp;nbsp;-f&amp;nbsp;$SQUID_CONF&amp;nbsp;(code=exited,&amp;nbsp;status=0/SUCCESS)
&amp;nbsp;Process:&amp;nbsp;28540&amp;nbsp;ExecStartPre=/usr/libexec/squid/cache_swap.sh&amp;nbsp;(code=exited,&amp;nbsp;status=0/SUCCESS)
&amp;nbsp;Main&amp;nbsp;PID:&amp;nbsp;28551&amp;nbsp;(squid)
&amp;nbsp;&amp;nbsp;Memory:&amp;nbsp;14.3M
&amp;nbsp;&amp;nbsp;CGroup:&amp;nbsp;/system.slice/squid.service
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;├─28551&amp;nbsp;/usr/sbin/squid&amp;nbsp;-f&amp;nbsp;/etc/squid/squid.conf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;├─28553&amp;nbsp;(squid-1)&amp;nbsp;-f&amp;nbsp;/etc/squid/squid.conf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└─28557&amp;nbsp;(logfile-daemon)&amp;nbsp;/var/log/squid/access.log
Jun&amp;nbsp;05&amp;nbsp;20:07:56&amp;nbsp;liumiaocn&amp;nbsp;systemd[1]:&amp;nbsp;Starting&amp;nbsp;Squid&amp;nbsp;caching&amp;nbsp;proxy...Jun&amp;nbsp;05&amp;nbsp;20:07:56&amp;nbsp;liumiaocn&amp;nbsp;squid[28551]:&amp;nbsp;Squid&amp;nbsp;Parent:&amp;nbsp;will&amp;nbsp;start&amp;nbsp;1&amp;nbsp;kids
Jun&amp;nbsp;05&amp;nbsp;20:07:56&amp;nbsp;liumiaocn&amp;nbsp;squid[28551]:&amp;nbsp;Squid&amp;nbsp;Parent:&amp;nbsp;(squid-1)&amp;nbsp;process&amp;nbsp;28553&amp;nbsp;started
Jun&amp;nbsp;05&amp;nbsp;20:07:56&amp;nbsp;liumiaocn&amp;nbsp;systemd[1]:&amp;nbsp;Started&amp;nbsp;Squid&amp;nbsp;caching&amp;nbsp;proxy.[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;问题2:无法进行&lt;/strong&gt;&lt;a data-text-link=&quot;10_1725932&quot; data-from=&quot;10680&quot; href=&quot;https://cloud.tencent.com/product/cns?from=10680&quot; target=&quot;_blank&quot; style=&quot;text-decoration-line: none; box-sizing: border-box; list-style: inherit; color: rgb(0, 164, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;域名解析&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;此时发现无法使用域名只能使用ip来访问&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;原因：dns未配置，在squid的配置文件中添加8.8.8.8和8.8.4.4&lt;/p&gt;&lt;/blockquote&gt;&lt;pre class=&quot;prism-token token  language-javascript&quot; style=&quot;box-sizing: border-box; list-style: inherit; padding: 1em; color: rgb(204, 204, 204); background-color: rgb(80, 85, 107); border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;&quot;&gt;[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;grep&amp;nbsp;nameserver&amp;nbsp;/etc/squid/squid.conf
dns_nameservers&amp;nbsp;8.8.8.8&amp;nbsp;8.8.4.4[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;
[root@liumiaocn&amp;nbsp;~]#&amp;nbsp;systemctl&amp;nbsp;restart&amp;nbsp;squid[root@liumiaocn&amp;nbsp;~]#&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;客户端的访问&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;squid的缺省port为3128，在这里没有修改，在客户端使用如下方式即可访问：&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;http方式&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;export http_proxy=http://192.168.163.117:3128 
 curl http://www.baidu.com&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;https方式&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; list-style: inherit; margin: 0px 0px 24px; padding: 0px 15px; color: rgb(119, 119, 119); border-left: 4px solid rgb(221, 221, 221); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px;&quot;&gt;export https_proxy=http://192.168.163.117:3128 
 curl https://www.baidu.com&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;box-sizing: border-box; list-style: inherit;&quot;&gt;总结&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; box-sizing: border-box; list-style: inherit; min-height: 24px; color: rgb(51, 51, 51); font-family: &amp;quot;pingfang SC&amp;quot;, &amp;quot;helvetica neue&amp;quot;, arial, &amp;quot;hiragino sans gb&amp;quot;, &amp;quot;microsoft yahei ui&amp;quot;, &amp;quot;microsoft yahei&amp;quot;, simsun, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);&quot;&gt;以上就是这篇文章的全部内容了，希望本文的内容对大家的学习或者工作具有一定的参考学习价值，谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 19 Oct 2021 14:36:23 +0800</pubDate></item><item><title>MySQL JSON类型</title><link>https://www.175.run/post/3.html</link><description>&lt;div&gt;&lt;div&gt;&lt;p&gt;MySQL支持JSON数据类型。相比于Json格式的字符串类型，JSON数据类型的优势有：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;存储在JSON列中的JSON文档的会被自动验证。无效的文档会产生错误；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;最佳存储格式。存储在JSON列中的JSON文档会被转换为允许快速读取文档元素的内部格式。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;存储在JSON列中的任何JSON文档的大小都受系统变量&lt;code&gt;max_allowed_packet&lt;/code&gt;的值的限制，可以使用&lt;code&gt;JSON_STORAGE_SIZE()&lt;/code&gt;函数获得存储JSON文档所需的空间。&lt;/p&gt;&lt;h3&gt;JSON值的局部更新&lt;/h3&gt;&lt;p&gt;在MySQL8.0中，优化器可以执行JSON列的局部就地更新，而不用删除旧文档再将整个新文档写入该列。局部更新的条件：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;正在更新的列被声明为JSON；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;该UPDATE语句使用任一的三个函数 &lt;code&gt;JSON_SET()&lt;/code&gt;， &lt;code&gt;JSON_REPLACE()&lt;/code&gt;或 &lt;code&gt;JSON_REMOVE()&lt;/code&gt;更新列；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;输入列和目标列必须是同一列；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;所有更改都使用新值替换现有数组或对象值，并且不向父对象或数组添加任何新元素；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;新值不能大于旧值；&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;创建JSON值&lt;/h3&gt;&lt;p&gt;JSON数组包含在 字符&lt;code&gt;[&lt;/code&gt;和&lt;code&gt;]&lt;/code&gt;字符中，其中为一个由逗号分隔的值列表：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-json&quot;&gt;[&amp;quot;abc&amp;quot;,&amp;nbsp;10,&amp;nbsp;null,&amp;nbsp;true,&amp;nbsp;false]&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;JSON对象包含在字符&lt;code&gt;{&lt;/code&gt;和&lt;code&gt;}&lt;/code&gt;字符中，其中为一组由逗号分隔的键值对，键必须是字符串：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-json&quot;&gt;{&amp;quot;k1&amp;quot;:&amp;nbsp;&amp;quot;value&amp;quot;,&amp;nbsp;&amp;quot;k2&amp;quot;:&amp;nbsp;10}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在JSON数组和JSON对象的值中允许嵌套：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-json&quot;&gt;[99,&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;&amp;quot;HK500&amp;quot;,&amp;nbsp;&amp;quot;cost&amp;quot;:&amp;nbsp;75.99},&amp;nbsp;[&amp;quot;hot&amp;quot;,&amp;nbsp;&amp;quot;cold&amp;quot;]]{&amp;quot;k1&amp;quot;:&amp;nbsp;&amp;quot;value&amp;quot;,&amp;nbsp;&amp;quot;k2&amp;quot;:&amp;nbsp;[10,&amp;nbsp;20]}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下例中向创建一个只有一个JSON列的表格&lt;code&gt;t_json&lt;/code&gt;，并向其中添加JSON值：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-csharp&quot;&gt;mysql&amp;gt;&amp;nbsp;CREATE&amp;nbsp;TABLE&amp;nbsp;t_json&amp;nbsp;(jdoc&amp;nbsp;JSON)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8;Query&amp;nbsp;OK,&amp;nbsp;0&amp;nbsp;rows&amp;nbsp;affected,&amp;nbsp;1&amp;nbsp;warning&amp;nbsp;(0.73&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(&amp;#39;[1,2]&amp;#39;);Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.17&amp;nbsp;sec

mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(&amp;#39;{&amp;quot;key1&amp;quot;:&amp;quot;value1&amp;quot;,&amp;quot;key2&amp;quot;:&amp;quot;value2&amp;quot;}&amp;#39;);Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.27&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(&amp;#39;&amp;quot;HELLO&amp;quot;&amp;#39;);Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.20&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若添加的值为非JSON格式，则报错：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-csharp&quot;&gt;mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(&amp;quot;HELLO&amp;quot;);ERROR&amp;nbsp;3140&amp;nbsp;(22032):&amp;nbsp;Invalid&amp;nbsp;JSON&amp;nbsp;text:&amp;nbsp;&amp;quot;Invalid&amp;nbsp;value.&amp;quot;&amp;nbsp;at&amp;nbsp;position&amp;nbsp;0&amp;nbsp;in&amp;nbsp;value&amp;nbsp;for&amp;nbsp;column&amp;nbsp;&amp;#39;t_json.jdoc&amp;#39;.&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看&lt;code&gt;t_json&lt;/code&gt;:&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;t_json;
+--------------------------------------+
|&amp;nbsp;jdoc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+--------------------------------------+
|&amp;nbsp;[1,&amp;nbsp;2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
|&amp;nbsp;{&amp;quot;key1&amp;quot;:&amp;nbsp;&amp;quot;value1&amp;quot;,&amp;nbsp;&amp;quot;key2&amp;quot;:&amp;nbsp;&amp;quot;value2&amp;quot;}&amp;nbsp;|
|&amp;nbsp;&amp;quot;HELLO&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+--------------------------------------+
3&amp;nbsp;rows&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_TYPE()&lt;/code&gt;函数尝试将传入的值其解析为JSON值。如果值有效，则返回值的JSON类型，否则产生错误：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-swift&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_TYPE(&amp;#39;[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,true,13]&amp;#39;);+--------------------------------+|&amp;nbsp;JSON_TYPE(&amp;#39;[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,true,13]&amp;#39;)&amp;nbsp;|+--------------------------------+|&amp;nbsp;ARRAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+--------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.04&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_TYPE(&amp;#39;[a,&amp;quot;b&amp;quot;,true,13]&amp;#39;);&amp;nbsp;//注意&amp;nbsp;aERROR&amp;nbsp;3141&amp;nbsp;(22032):&amp;nbsp;Invalid&amp;nbsp;JSON&amp;nbsp;text&amp;nbsp;in&amp;nbsp;argument&amp;nbsp;1&amp;nbsp;to&amp;nbsp;function&amp;nbsp;json_type:&amp;nbsp;&amp;quot;Invalid&amp;nbsp;value.&amp;quot;&amp;nbsp;at&amp;nbsp;position&amp;nbsp;1.&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_ARRAY()&lt;/code&gt;接收传入的值列表（可以为空），返回包含这些值的JSON数组：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_ARRAY(&amp;#39;ab&amp;#39;,false,13);
+---------------------------+
|&amp;nbsp;JSON_ARRAY(&amp;#39;ab&amp;#39;,false,13)&amp;nbsp;|
+---------------------------+
|&amp;nbsp;[&amp;quot;ab&amp;quot;,&amp;nbsp;false,&amp;nbsp;13]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+---------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)


mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_ARRAY();
+--------------+
|&amp;nbsp;JSON_ARRAY()&amp;nbsp;|
+--------------+
|&amp;nbsp;[]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+--------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_OBJECT()&lt;/code&gt; 接收传入的键值对列表（可以为空），并返回包含这些键值对的JSON对象：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_OBJECT(&amp;#39;key1&amp;#39;,&amp;#39;a&amp;#39;,&amp;#39;key2&amp;#39;,&amp;#39;b&amp;#39;);
+------------------------------------+
|&amp;nbsp;JSON_OBJECT(&amp;#39;key1&amp;#39;,&amp;#39;a&amp;#39;,&amp;#39;key2&amp;#39;,&amp;#39;b&amp;#39;)&amp;nbsp;|
+------------------------------------+
|&amp;nbsp;{&amp;quot;key1&amp;quot;:&amp;nbsp;&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;key2&amp;quot;:&amp;nbsp;&amp;quot;b&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+------------------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.03&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果传入的参数不能组成键值对，则报错：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-java&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_OBJECT(&amp;#39;key1&amp;#39;,&amp;#39;value1&amp;#39;,&amp;#39;key2&amp;#39;);ERROR&amp;nbsp;1582&amp;nbsp;(42000):&amp;nbsp;Incorrect&amp;nbsp;parameter&amp;nbsp;count&amp;nbsp;in&amp;nbsp;the&amp;nbsp;call&amp;nbsp;to&amp;nbsp;native&amp;nbsp;function&amp;nbsp;&amp;#39;JSON_OBJECT&amp;#39;&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_MERGE_PRESERVE()&lt;/code&gt; 获取两个或多个JSON文档并返回组合结果：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-swift&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;1]&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;key&amp;quot;:&amp;nbsp;&amp;quot;value&amp;quot;}&amp;#39;);+-----------------------------------------------------+|&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;1]&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;key&amp;quot;:&amp;nbsp;&amp;quot;value&amp;quot;}&amp;#39;)&amp;nbsp;|+-----------------------------------------------------+|&amp;nbsp;[&amp;quot;a&amp;quot;,&amp;nbsp;1,&amp;nbsp;{&amp;quot;key&amp;quot;:&amp;nbsp;&amp;quot;value&amp;quot;}]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-----------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.03&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因此我们也可以使用以上三种方法向表中添加JSON值，可以一定程度地避免输入格式错误：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-csharp&quot;&gt;mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(JSON_ARRAY(&amp;#39;json_array&amp;#39;));Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.19&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(JSON_OBJECT(&amp;#39;key&amp;#39;,&amp;#39;hello&amp;#39;));Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.09&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;INSERT&amp;nbsp;INTO&amp;nbsp;t_json&amp;nbsp;VALUES(JSON_MERGE_PRESERVE(JSON_OBJECT(&amp;#39;key&amp;#39;,&amp;#39;hello&amp;#39;),JSON_ARRAY(1,2)));Query&amp;nbsp;OK,&amp;nbsp;1&amp;nbsp;row&amp;nbsp;affected&amp;nbsp;(0.14&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;t_json;+--------------------------------------+|&amp;nbsp;jdoc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+--------------------------------------+|&amp;nbsp;[1,&amp;nbsp;2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;||&amp;nbsp;{&amp;quot;key1&amp;quot;:&amp;nbsp;&amp;quot;value1&amp;quot;,&amp;nbsp;&amp;quot;key2&amp;quot;:&amp;nbsp;&amp;quot;value2&amp;quot;}&amp;nbsp;||&amp;nbsp;&amp;quot;HELLO&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;||&amp;nbsp;[&amp;quot;json_array&amp;quot;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;||&amp;nbsp;{&amp;quot;key&amp;quot;:&amp;nbsp;&amp;quot;hello&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;||&amp;nbsp;[{&amp;quot;key&amp;quot;:&amp;nbsp;&amp;quot;hello&amp;quot;},&amp;nbsp;1,&amp;nbsp;2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+--------------------------------------+6&amp;nbsp;rows&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;JSON值的规范化，合并和自动包装&lt;/h3&gt;&lt;p&gt;解析字符串并发现字符串是有效的JSON文档时，它在被解析时也会被规范化。对于重复的键（&lt;code&gt;key&lt;/code&gt;）,后面的值（&lt;code&gt;value&lt;/code&gt;）会覆盖前面的值。如下：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_OBJECT(&amp;#39;x&amp;#39;,1,&amp;#39;y&amp;#39;,2,&amp;#39;x&amp;#39;,&amp;#39;a&amp;#39;,&amp;#39;x&amp;#39;,&amp;#39;b&amp;#39;);
+------------------------------------------+
|&amp;nbsp;JSON_OBJECT(&amp;#39;x&amp;#39;,1,&amp;#39;y&amp;#39;,2,&amp;#39;x&amp;#39;,&amp;#39;a&amp;#39;,&amp;#39;x&amp;#39;,&amp;#39;b&amp;#39;)&amp;nbsp;|
+------------------------------------------+
|&amp;nbsp;{&amp;quot;x&amp;quot;:&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;y&amp;quot;:&amp;nbsp;2}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+------------------------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.07&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这种“覆盖”在向JSON列添加值时也会发生。&lt;br/&gt;在MySQL8.0.3之前的版本中，与此相反，对于被重复的键，它的第一个值会被保留，后添加的值则会被抛弃。&lt;/p&gt;&lt;h4&gt;合并JSON值&lt;/h4&gt;&lt;p&gt;MySQL8.0.3及更高版本中，有两种合并函数：&lt;code&gt;JSON_MERGE_PRESERVE()&lt;/code&gt;和 &lt;code&gt;JSON_MERGE_PATCH()&lt;/code&gt;。下面具讨论它们的区别。&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;合并数组：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-rust&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_MERGE_PATCH(&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[true,&amp;nbsp;false]&amp;#39;);+-------------------------------------------------------------------------+|&amp;nbsp;JSON_MERGE_PATCH(&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[true,&amp;nbsp;false]&amp;#39;)&amp;nbsp;|+-------------------------------------------------------------------------+|&amp;nbsp;[true,&amp;nbsp;false]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-------------------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[true,&amp;nbsp;false]&amp;#39;);+----------------------------------------------------------------------------+|&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;#39;[1,&amp;nbsp;2]&amp;#39;,&amp;nbsp;&amp;#39;[true,&amp;nbsp;false]&amp;#39;)&amp;nbsp;|+----------------------------------------------------------------------------+|&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;true,&amp;nbsp;false]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+----------------------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;合并数组时，&lt;code&gt;JSON_MERGE_PRESERVE&lt;/code&gt;只保留最后传入的数组参数，而&lt;code&gt;JSON_MERGE_PRESERVE&lt;/code&gt;则按传入顺序将数组参数连接。&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;合并对象&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-swift&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_MERGE_PATCH(&amp;#39;{&amp;quot;a&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;a&amp;quot;:&amp;nbsp;4}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;5,&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;#39;);+------------------------------------------------------------------------------+|&amp;nbsp;JSON_MERGE_PATCH(&amp;#39;{&amp;quot;a&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;a&amp;quot;:&amp;nbsp;4}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;5,&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;#39;)&amp;nbsp;|+------------------------------------------------------------------------------+|&amp;nbsp;{&amp;quot;a&amp;quot;:&amp;nbsp;4,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2,&amp;nbsp;&amp;quot;c&amp;quot;:&amp;nbsp;5,&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+------------------------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;{&amp;quot;a&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;a&amp;quot;:&amp;nbsp;4}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;5,&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;#39;);+---------------------------------------------------------------------------------+|&amp;nbsp;JSON_MERGE_PRESERVE(&amp;#39;{&amp;quot;a&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;3,&amp;nbsp;&amp;quot;a&amp;quot;:&amp;nbsp;4}&amp;#39;,&amp;nbsp;&amp;#39;{&amp;quot;c&amp;quot;:&amp;nbsp;5,&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;#39;)&amp;nbsp;|+---------------------------------------------------------------------------------+|&amp;nbsp;{&amp;quot;a&amp;quot;:&amp;nbsp;[3,&amp;nbsp;4],&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2,&amp;nbsp;&amp;quot;c&amp;quot;:&amp;nbsp;[3,&amp;nbsp;5],&amp;nbsp;&amp;quot;d&amp;quot;:&amp;nbsp;3}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+---------------------------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;合并对象时，对于重复键，&lt;code&gt;JSON_MERGE_PRESERVE&lt;/code&gt;只保留最后传入的键值，而&lt;code&gt;JSON_MERGE_PRESERVE&lt;/code&gt;重复键的所有值保留为数组。&lt;/p&gt;&lt;h3&gt;搜索和修改JSON值&lt;/h3&gt;&lt;p&gt;在了解搜索和修改JSON值之前，先来看看JSON的路径语法。&lt;/p&gt;&lt;h4&gt;路径语法&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;.keyName&lt;/code&gt;：JSON对象中键名为&lt;code&gt;keyName&lt;/code&gt;的值；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;对于不合法的键名（如有空格），在路径引用中必须用双引号&lt;code&gt;&amp;quot;&lt;/code&gt;将键名括起来，例，&lt;code&gt;.&amp;quot;key name&amp;quot;&lt;/code&gt;；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;[index]&lt;/code&gt;：JSON数组中索引为&lt;code&gt;index&lt;/code&gt;的值，JSON数组的索引同样从0开始；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;[index1 to index2]&lt;/code&gt;：JSON数组中从&lt;code&gt;index1&lt;/code&gt;到&lt;code&gt;index2&lt;/code&gt;的值的集合；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;.*&lt;/code&gt;: JSON对象中的所有&lt;code&gt;value&lt;/code&gt;；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;[*]&lt;/code&gt;: JSON数组中的所有值；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;prefix**suffix&lt;/code&gt;: 以&lt;code&gt;prefix&lt;/code&gt;开头并以&lt;code&gt;suffix&lt;/code&gt;结尾的路径；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;**.keyName&lt;/code&gt;为多个路径，如对于JSON对象&lt;code&gt;&amp;#39;{&amp;quot;a&amp;quot;: {&amp;quot;b&amp;quot;: 1}, &amp;quot;c&amp;quot;: {&amp;quot;b&amp;quot;: 2}}&amp;#39;&lt;/code&gt;,&lt;code&gt;&amp;#39;$**.b&amp;#39;&lt;/code&gt;指路径&lt;code&gt;$.a.b&lt;/code&gt;和&lt;code&gt;$.c.b&lt;/code&gt;；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不存在的路径返回结果为NULL；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;前导$字符表示当前正在使用的JSON文档&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;例子：对于数组&lt;code&gt;[3, {&amp;quot;a&amp;quot;: [5, 6], &amp;quot;b&amp;quot;: 10}, [99, 100]]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;$[1]&lt;/code&gt;为&lt;code&gt;{&amp;quot;a&amp;quot;: [5, 6], &amp;quot;b&amp;quot;: 10}&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;[1].a&lt;/code&gt;为&lt;code&gt;[5, 6]&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;$[1].a[1]&lt;/code&gt;为 &lt;code&gt;6&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;$[1].b&lt;/code&gt;为 &lt;code&gt;10&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;$[2][0]&lt;/code&gt;为 &lt;code&gt;99&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;h4&gt;搜索&lt;/h4&gt;&lt;p&gt;&lt;code&gt;JSON_EXTRACT&lt;/code&gt;提取JSON值，直接看例子：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;JSON对象&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-swift&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_EXTRACT(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;);+--------------------------------------------------------+|&amp;nbsp;JSON_EXTRACT(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;)&amp;nbsp;|+--------------------------------------------------------+|&amp;nbsp;&amp;quot;Taylor&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+--------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_EXTRACT(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.*&amp;#39;);+-----------------------------------------------------+|&amp;nbsp;JSON_EXTRACT(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.*&amp;#39;)&amp;nbsp;|+-----------------------------------------------------+|&amp;nbsp;[29,&amp;nbsp;&amp;quot;Taylor&amp;quot;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-----------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;JSON数组&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-swift&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;);+-----------------------------------------+|&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;)&amp;nbsp;|+-----------------------------------------+|&amp;nbsp;&amp;quot;b&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-----------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[1&amp;nbsp;to&amp;nbsp;2]&amp;#39;);+----------------------------------------------+|&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[1&amp;nbsp;to&amp;nbsp;2]&amp;#39;)&amp;nbsp;|+----------------------------------------------+|&amp;nbsp;[&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+----------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[*]&amp;#39;);+-----------------------------------------+|&amp;nbsp;JSON_EXTRACT(&amp;#39;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;#39;,&amp;nbsp;&amp;#39;$[*]&amp;#39;)&amp;nbsp;|+-----------------------------------------+|&amp;nbsp;[&amp;quot;a&amp;quot;,&amp;nbsp;&amp;quot;b&amp;quot;,&amp;nbsp;&amp;quot;c&amp;quot;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-----------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;h4&gt;修改&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_REPLACE&lt;/code&gt; 替换值（只替换已经存在的旧值）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_SET&lt;/code&gt; 设置值（替换旧值，并插入不存在的新值）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_INSERT&lt;/code&gt; 插入值（插入新值，但不替换已经存在的旧值）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;JSON_REMOVE&lt;/code&gt; 删除JSON数据，删除指定值后的JSON文档&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;code&gt;JSON_REPLACE&lt;/code&gt;与&lt;code&gt;JSON_SET&lt;/code&gt;的区别：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-rust&quot;&gt;//&amp;nbsp;旧值存在mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_REPLACE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;);+----------------------------------------------------------------+|&amp;nbsp;JSON_REPLACE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;)&amp;nbsp;|+----------------------------------------------------------------+|&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Mere&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+----------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_SET(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;,&amp;nbsp;&amp;quot;Mere&amp;quot;);+------------------------------------------------------------+|&amp;nbsp;JSON_SET(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;)&amp;nbsp;|+------------------------------------------------------------+|&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Mere&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)//&amp;nbsp;旧值不存在mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_REPLACE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.cat&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;);+---------------------------------------------------------------+|&amp;nbsp;JSON_REPLACE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.cat&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;)&amp;nbsp;|+---------------------------------------------------------------+|&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+---------------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_SET(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.cat&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;);+-----------------------------------------------------------+|&amp;nbsp;JSON_SET(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.cat&amp;#39;,&amp;nbsp;&amp;#39;Mere&amp;#39;)&amp;nbsp;|+-----------------------------------------------------------+|&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;cat&amp;quot;:&amp;nbsp;&amp;quot;Mere&amp;quot;,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-----------------------------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;JSON_INSERT&lt;/code&gt;和&lt;code&gt;JSON_SET&lt;/code&gt;:&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-csharp&quot;&gt;//&amp;nbsp;旧值存在mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_INSERT(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;,&amp;nbsp;4);+-------------------------------------+|&amp;nbsp;JSON_INSERT(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;,&amp;nbsp;4)&amp;nbsp;|+-------------------------------------+|&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_SET(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;,&amp;nbsp;4);+----------------------------------+|&amp;nbsp;JSON_SET(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;,&amp;nbsp;4)&amp;nbsp;|+----------------------------------+|&amp;nbsp;[1,&amp;nbsp;4,&amp;nbsp;3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+----------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)//旧值不存在mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_INSERT(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;,&amp;nbsp;4);+-------------------------------------+|&amp;nbsp;JSON_INSERT(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;,&amp;nbsp;4)&amp;nbsp;|+-------------------------------------+|&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+-------------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_SET(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;,&amp;nbsp;4);+----------------------------------+|&amp;nbsp;JSON_SET(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;,&amp;nbsp;4)&amp;nbsp;|+----------------------------------+|&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|+----------------------------------+1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;JSON_REMOVE&lt;/code&gt;:&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_REMOVE(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;);
+----------------------------------+
|&amp;nbsp;JSON_REMOVE(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[1]&amp;#39;)&amp;nbsp;|
+----------------------------------+
|&amp;nbsp;[1,&amp;nbsp;3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+----------------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)

mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_REMOVE(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;);
+----------------------------------+
|&amp;nbsp;JSON_REMOVE(&amp;#39;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;#39;,&amp;nbsp;&amp;#39;$[4]&amp;#39;)&amp;nbsp;|
+----------------------------------+
|&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+----------------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)

mysql&amp;gt;&amp;nbsp;SELECT&amp;nbsp;JSON_REMOVE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;);
+-------------------------------------------------------+
|&amp;nbsp;JSON_REMOVE(&amp;#39;{&amp;quot;id&amp;quot;:&amp;nbsp;29,&amp;nbsp;&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;Taylor&amp;quot;}&amp;#39;,&amp;nbsp;&amp;#39;$.name&amp;#39;)&amp;nbsp;|
+-------------------------------------------------------+
|&amp;nbsp;{&amp;quot;id&amp;quot;:&amp;nbsp;29}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|
+-------------------------------------------------------+
1&amp;nbsp;row&amp;nbsp;in&amp;nbsp;set&amp;nbsp;(0.00&amp;nbsp;sec)&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;JSON值的比较和排序&lt;/h3&gt;&lt;p&gt;可以使用&lt;code&gt;=&lt;/code&gt;，&lt;code&gt;&amp;lt;&lt;/code&gt;，&lt;code&gt;&amp;lt;=&lt;/code&gt;，&lt;code&gt;&amp;gt;&lt;/code&gt;，&lt;code&gt;&amp;gt;=&lt;/code&gt;，&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;，&lt;code&gt;!=&lt;/code&gt;，和 &lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;对JSON值进行比较。&lt;br/&gt;JSON值的比较先比较值的类型。如果类型不同，则直接 返回类型的优先级的比较结果；如果类型相同，再进行值的内容的比较。&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;JSON中值的类型的优先级从高到低为：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-php&quot;&gt;BLOBBITOPAQUEDATETIMETIMEDATEBOOLEANARRAYOBJECTSTRINGINTEGER,&amp;nbsp;DOUBLENULL&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;OPAQUE&lt;/code&gt;值是不属于其他类型的值。&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;JSON值的内容的比较规则（因类型不同而有差别）：&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-csharp&quot;&gt;[]&amp;nbsp;&amp;lt;&amp;nbsp;[&amp;quot;a&amp;quot;]&amp;nbsp;&amp;lt;&amp;nbsp;[&amp;quot;ab&amp;quot;]&amp;nbsp;&amp;lt;&amp;nbsp;[&amp;quot;ab&amp;quot;,&amp;nbsp;&amp;quot;cd&amp;quot;,&amp;nbsp;&amp;quot;ef&amp;quot;]&amp;nbsp;&amp;lt;&amp;nbsp;[&amp;quot;ab&amp;quot;,&amp;nbsp;&amp;quot;ef&amp;quot;]&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;{&amp;quot;a&amp;quot;:&amp;nbsp;1,&amp;nbsp;&amp;quot;b&amp;quot;:&amp;nbsp;2}&amp;nbsp;=&amp;nbsp;{&amp;quot;b&amp;quot;:&amp;nbsp;2,&amp;nbsp;&amp;quot;a&amp;quot;:&amp;nbsp;1}&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-bash&quot;&gt;&amp;quot;A&amp;quot;&amp;lt;&amp;quot;a&amp;quot;&amp;nbsp;&amp;lt;&amp;nbsp;&amp;quot;ab&amp;quot;&amp;nbsp;&amp;lt;&amp;nbsp;&amp;quot;b&amp;quot;&amp;nbsp;&amp;lt;&amp;nbsp;&amp;quot;bc&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;如果进行INTEGER列和DOUBLE列的比较，则integer数会被转为double数，即精确值转为近似值，再进行比较；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果查询比较包含数字的两个JSON列，则无法预先知道数字是INTEGER还是DOUBLE，比较时会将近似值转为精确值，在进行比较。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;INTEGER比较&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;DOUBLE比较&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;INTEGER， DOUBLE&lt;/p&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-undefined&quot;&gt;9223372036854775805&amp;nbsp;&amp;lt;&amp;nbsp;9223372036854775806&amp;nbsp;&amp;lt;&amp;nbsp;9223372036854775807&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;_2Uzcx_&quot;&gt;&lt;button class=&quot;VJbwyy&quot; type=&quot;button&quot; aria-label=&quot;复制代码&quot;&gt;&lt;em aria-label=&quot;icon: copy&quot; class=&quot;anticon anticon-copy&quot;&gt;&lt;svg viewbox=&quot;64 64 896 896&quot; focusable=&quot;false&quot; class=&quot;&quot; data-icon=&quot;copy&quot; width=&quot;1em&quot; height=&quot;1em&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/em&gt;&lt;/button&gt;&lt;pre class=&quot;line-numbers  language-undefined&quot;&gt;9223372036854775805&amp;nbsp;=&amp;nbsp;9223372036854775806&amp;nbsp;=&amp;nbsp;9223372036854775&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;STRING&lt;br/&gt;与BLOB比较规则相似。区分大小写。&lt;br/&gt;如：&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;BOOLEAN&lt;br/&gt;&lt;code&gt;false&lt;/code&gt; &amp;lt; &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;OBJECT&lt;br/&gt;具有完全相同的键值对的两对象相等。如&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;BLOB&lt;br/&gt;比较两个值的前N个字节，其中N为较短的值的字节数。如果前N个字节相同，则较短的值较小。BIT和OPAQUE与BLOB的规则相同。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;DATETIME&lt;br/&gt;较早时间点的值较小。如果两个值分别为 MySQL DATETIME and TIMESTAMP类型且表示的是相同的时间点，则这两个值相等。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TIME&lt;br/&gt;较少的是时间值较小。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;DATE&lt;br/&gt;较早的日期值较小。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ARRAY&lt;br/&gt;较短的数组较小。&lt;br/&gt;如果两个数组长度相同，且相同索引处的值相同，则两个数组相等。&lt;br/&gt;对于不行等的数组，它们的大小顺序由两数组中第一个不同的元素决定。&lt;br/&gt;例子：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;作者：竹鼠不要中暑&lt;br/&gt;链接：https://www.jianshu.com/p/25161add5e4b&lt;br/&gt;来源：简书&lt;br/&gt;&lt;/div&gt;</description><pubDate>Fri, 15 Oct 2021 16:49:49 +0800</pubDate></item></channel></rss>