<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DB &#8211; chang的个人博客</title>
	<atom:link href="https://www.qiqin-chang.cn/category/back/db/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.qiqin-chang.cn</link>
	<description></description>
	<lastBuildDate>Sun, 28 Dec 2025 19:37:46 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.qiqin-chang.cn/wp-content/uploads/2025/04/cropped-无背景-圆形-32x32.png</url>
	<title>DB &#8211; chang的个人博客</title>
	<link>https://www.qiqin-chang.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Redis-非关系型数据库</title>
		<link>https://www.qiqin-chang.cn/redis-%e9%9d%9e%e5%85%b3%e7%b3%bb%e5%9e%8b%e6%95%b0%e6%8d%ae%e5%ba%93/</link>
					<comments>https://www.qiqin-chang.cn/redis-%e9%9d%9e%e5%85%b3%e7%b3%bb%e5%9e%8b%e6%95%b0%e6%8d%ae%e5%ba%93/#respond</comments>
		
		<dc:creator><![CDATA[乐章]]></dc:creator>
		<pubDate>Wed, 09 Apr 2025 11:22:52 +0000</pubDate>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[后端]]></category>
		<guid isPermaLink="false">http://8.153.197.211/?p=41</guid>

					<description><![CDATA[基础信息： 下载地址： win版：https://github.com/microsoftarchive/re [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">基础信息：</h1>



<p>下载地址：</p>



<p>win版：<a href="https://github.com/microsoftarchive/redis/releases">https://github.com/microsoftarchive/redis/releases</a></p>



<p>Linux版：<a href="https://download.redis.io/releases/">https://download.redis.io/releases/</a></p>



<p>安装方式：解压安装</p>



<p>默认端口号：6379</p>



<p>推荐版本：3.2.1</p>



<p>推荐可视化工具：Another Redis</p>



<p>推荐驱动工具：SpringData Redis</p>



<h1 class="wp-block-heading">基础操作：</h1>



<p>服务端：</p>



<p>运行操作：</p>



<pre class="wp-block-preformatted">redis-server.exe redis.windows.conf</pre>



<p>结束操作：</p>



<pre class="wp-block-preformatted">ctrl + c</pre>



<p>客户端：</p>



<p>连接操作：</p>



<pre class="wp-block-preformatted">redis-cli.exe （默认连接本地服务端）redis-cli.exe -h 服务端地址 -p 端口号 -a 密码</pre>



<p>退出操作：</p>



<pre class="wp-block-preformatted">exit</pre>



<p>密码设置：</p>



<p>在redis.windows.conf文件中解开requirepass foobared （foobared为密码）</p>



<p>驱动工具：SpringData Redis</p>



<h1 class="wp-block-heading">基础配置：</h1>



<p>配置方式：导入maven坐标-&gt;配置Redis数据源-&gt;编写配置类-&gt;创建RedisTemplate对象-&gt;通过对象操作Redis</p>



<p>导入maven坐标：</p>



<pre class="wp-block-preformatted">&lt;dependency&gt;<br> &nbsp;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br> &nbsp;&lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;<br>&lt;/dependency&gt;</pre>



<p>配置Redis数据源：</p>



<pre class="wp-block-preformatted">spring:<br> redis:<br>  host: localhost<br>  port: 6379<br>  password: 123456<br>  database: 0</pre>



<h1 class="wp-block-heading">基础类型：</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>类型</th><th>符号</th><th>说明</th></tr></thead><tbody><tr><td>字符串</td><td>string</td><td>普通字符，Redis中最简单的数据</td></tr><tr><td>哈希</td><td>hash-</td><td>类似与Java中的HashMap结构</td></tr><tr><td>列表</td><td>list</td><td>按照插入顺序排序，可以有重复元素，类似于Java中的LinkedList</td></tr><tr><td>集合</td><td>set</td><td>无须集合，没有重复元素，类似Java中的HashSet</td></tr><tr><td>有序集合</td><td>sorted set/zset</td><td>集合中的每个元素关联一个分数（score），根据分数升序排列，没有重复元素</td></tr></tbody></table></figure>



<h1 class="wp-block-heading">操作命令：</h1>



<p>字符串：</p>



<pre class="wp-block-preformatted">SET key value        &nbsp; 设置指定key的值        <br>​<br>GET key &nbsp;            &nbsp; 获取指定key的值<br>​<br>SETEX key second value  设置指定key的值，并将key的过期时间设置为seconds<br>​<br>SETNX key value      &nbsp; &nbsp;只有在key不存在时才能设置key的值</pre>



<p>哈希：</p>



<pre class="wp-block-preformatted">HSET key field value &nbsp; &nbsp; 将哈希表key中的字段field的值设为value      <br>​<br>HSET key field &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 获取存储在哈希表中的指定字段<br>​<br>HDEL key field          删除存储在 哈希表中的指定字段<br>​<br>HKEYS key               获取哈希表中的所有字段<br>​<br>HVALS key               获取哈希表中的所有值</pre>



<p>字符串：</p>



<pre class="wp-block-preformatted">LPUSH key value1 [value2]	  将一个或多个值插入到列表头部<br><br>LRANG key start stop	      获取列表指定范围内的元素（stop=-1为返回全部）<br><br>RPOP key				   	 移除并获取列表最后一个元素<br><br>LLEN key					 获取列表长度</pre>



<p>集合：</p>



<pre class="wp-block-preformatted">SADD key member1 [member2]	  向集合添加一个或多个成员<br><br>SMEMBERS key				 返回集合中的所有成员<br><br>SCARD key					 返回给定所有集合的交集<br><br>SINTER key1 [key2]			  返回所有给定集合的并集<br><br>SUNION key1 [key2]			  返回所有给定集合的并集<br><br>SREM key member1 [member2]	   删除集合中的一个或多个成员<br><br> </pre>



<p>有序集合：</p>



<pre class="wp-block-preformatted">ZADD key score1 member1 [score2 member2] 	 向有序集合添加一个或多个成员<br><br>ZRANGE key start stop [WITHSCORES] 			通过索引区间返回有序集合中指定区间的成员<br><br>ZINCRBY key increment member 			    有序集合中对指定成员的分数加上增量increment<br><br>ZREM key member1 [member2] 				    移除有序集合中的一个或多个成员</pre>



<p>通用命令：</p>



<pre class="wp-block-preformatted">KEYS pattern							  查找所有符合给定模式（pattern）的key<br><br>EXISTS key							 	  检查给定key是否存在<br><br>TYPE key								  返回key所存储的值的类型<br><br>DEL key									  该命令用于在key存在时删除key</pre>



<h1 class="wp-block-heading">使用方法：</h1>



<h2 class="wp-block-heading">字符串 String：</h2>



<pre class="wp-block-code"><code>//存入对象
redisTemplate.opsForValue().set("user:" + user.getId(), user, Duration.ofMinutes(30));  
//获取对象
redisTemplate.opsForValue().get("user:" + id);</code></pre>



<h2 class="wp-block-heading">哈希 hash：</h2>



<pre class="wp-block-code"><code>redisTemplate.opsForHash().put("user:1001", "name", "Alice");
redisTemplate.opsForHash().put("user:1001", "age", 25);
​
String name = (String) redisTemplate.opsForHash().get("user:1001", "name");</code></pre>



<h2 class="wp-block-heading">列表 list：</h2>



<pre class="wp-block-code"><code>//添加元素
//从左边插入一个元素
redisTemplate.opsForList().leftPush("users:list", user);
//从左边批量插入多个元素
redisTemplate.opsForList().leftPushAll("users:list", user1, user2);
//从右边插入一个元素
redisTemplate.opsForList().rightPush("users:list", user);
//从右边批量插入多个元素
redisTemplate.opsForList().rightPushAll("users:list", user1, user2);
​
//获取列表范围
//获取整个列表（0 到 -1 表示全部）
List&lt;Object> users = redisTemplate.opsForList().range("users:list", 0, -1);
//获取前3个元素
List&lt;Object> firstThree = redisTemplate.opsForList().range("users:list", 0, 2);
//获取最后一个元素
List&lt;Object> lastOne = redisTemplate.opsForList().range("users:list", -1, -1);
//获取列表长度
Long size = redisTemplate.opsForList().size("users:list");
​
// 弹出元素（移除并返回）
// 从左边弹出一个元素
Object leftUser = redisTemplate.opsForList().leftPop("users:list");
// 从右边弹出一个元素
Object rightUser = redisTemplate.opsForList().rightPop("users:list");
// 阻塞式弹出（BLPOP / BRPOP）——如果列表为空则等待，单位：秒
Object blockedUser = redisTemplate.opsForList().leftPop("users:list", 10, TimeUnit.SECONDS);
Object blockedRight = redisTemplate.opsForList().rightPop("users:list", 5, TimeUnit.SECONDS);
​
//删除元素
//移除列表中等于 value 的前 n 个元素
//count > 0 : 从头开始删除最多 count 个匹配项
//count &lt; 0 : 从尾开始删除最多 |count| 个匹配项
//count = 0 : 删除所有匹配项
Long removedCount = redisTemplate.opsForList().remove("users:list", 1, user); // 删除第一个匹配的 user
Long removeAll = redisTemplate.opsForList().remove("users:list", 0, user);   // 删除所有匹配的 user
​
//获取指定索引位置的元素
//获取索引为 0 的元素（第一个）
Object first = redisTemplate.opsForList().index("users:list", 0);
//获取倒数第一个元素
Object last = redisTemplate.opsForList().index("users:list", -1);
​
//设置指定索引位置的元素
//将索引 index 处的元素设置为新值（必须存在该索引）
redisTemplate.opsForList().set("users:list", 2, updatedUser);
​
//截取并保留指定范围
//只保留列表中 &#91;0, 9] 范围内的元素，其余删除（可用于分页缓存清理）
redisTemplate.opsForList().trim("users:list", 0, 9);
//清空整个列表
redisTemplate.opsForList().trim("users:list", 1, 0); // 巧妙技巧：起始 > 结束 → 清空</code></pre>



<h2 class="wp-block-heading">无序集合 set：</h2>



<pre class="wp-block-code"><code>//存入集合
redisTemplate.opsForSet().add("users:set", "user");
//获取集合中所有值
Set&lt;Object> userSet = redisTemplate.opsForSet().members("users:set");
//判断是否存在该值
Boolean isLiked = redisTemplate.opsForSet().isMember("users:set", "user");
//获取集合大小
Long count = redisTemplate.opsForSet().zCard("users:set"); // 推荐写法
// 删除一个用户
redisTemplate.opsForSet().remove("users:set", "user");
// 删除多个用户
redisTemplate.opsForSet().remove("users:set", "user1", "user2");
// 删除所有匹配的值
Object&#91;] toRemove = {"user1", "user2"};
redisTemplate.opsForSet().remove("users:set", toRemove);
//随机弹出并删除元素
Object luckyUser = redisTemplate.opsForSet().pop("users:set");
//求交集
Set&lt;Object> commonFriends = redisTemplate.opsForSet().intersect("user:set1", "user:set2");
//求并集
Set&lt;Object> allMembers = redisTemplate.opsForSet().union("user:set1", "user:set2");
//求差集
Set&lt;Object> recommendUsers = redisTemplate.opsForSet().difference("user:set1", "user:set2");</code></pre>



<h2 class="wp-block-heading">有序集合 sorted set/zset：</h2>



<pre class="wp-block-code"><code>//将值存入指定的有序集合
redisTemplate.opsForZSet().add(LEADERBOARD_KEY, userId.toString(), score); //key value 排序值
//获取第x个到第y个的该集合的所有值
//正序获得
redisTemplate.opsForZSet().rangeWithScores(LEADERBOARD_KEY, 0, topN - 1);
//逆序获得
redisTemplate.opsForZSet().reverseRangeWithScores(LEADERBOARD_KEY, 0, topN - 1);
//获取该值的存入顺序（从0开始）
redisTemplate.opsForZSet().reverseRank(LEADERBOARD_KEY, uid);
//获取排序值
redisTemplate.opsForZSet().score(LEADERBOARD_KEY, uid);
//增加排序值
redisTemplate.opsForZSet().incrementScore(LEADERBOARD_KEY, uid, increment);
//删除该值
redisTemplate.opsForZSet().remove(LEADERBOARD_KEY, uid);
//获取该有序集合存入值的数量
redisTemplate.opsForZSet().zCard(LEADERBOARD_KEY);
//获取区间内的值
redisTemplate.opsForZSet().reverseRangeByScoreWithScores(LEADERBOARD_KEY, min, max);
//删除区间内的值
redisTemplate.opsForZSet().removeRangeByScore(LEADERBOARD_KEY, min, max);</code></pre>



<h2 class="wp-block-heading">设置过期时间：</h2>



<pre class="wp-block-code"><code>redisTemplate.expire("key", 10, TimeUnit.SECONDS);
redisTemplate.expireAt("key", new Date(System.currentTimeMillis() + 60000));</code></pre>



<p><a href="#top">返回顶部</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.qiqin-chang.cn/redis-%e9%9d%9e%e5%85%b3%e7%b3%bb%e5%9e%8b%e6%95%b0%e6%8d%ae%e5%ba%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MySQL-关系型数据库</title>
		<link>https://www.qiqin-chang.cn/37/</link>
					<comments>https://www.qiqin-chang.cn/37/#respond</comments>
		
		<dc:creator><![CDATA[乐章]]></dc:creator>
		<pubDate>Wed, 09 Apr 2025 11:14:58 +0000</pubDate>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[后端]]></category>
		<guid isPermaLink="false">http://8.153.197.211/?p=37</guid>

					<description><![CDATA[基础配置： 依赖： &#60;dependency&#62; &#160; &#160;&#60;groupId&#038;g [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">基础配置：</h1>



<p>依赖：</p>



<pre class="wp-block-preformatted">&lt;dependency&gt;<br> &nbsp; &nbsp;&lt;groupId&gt;mysql&lt;/groupId&gt;<br> &nbsp; &nbsp;&lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br> &nbsp; &nbsp;&lt;scope&gt;runtime&lt;/scope&gt;<br>&lt;/dependency&gt;</pre>



<p>配置：</p>



<pre class="wp-block-preformatted">spring: &nbsp;<br>    datasource: &nbsp; &nbsp;<br>        url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&amp;characterEncoding=UTF-                      8&amp;autoReconnect=true&amp;serverTimezone=Asia/Shanghai&amp;rewriteBatchedStatements=true &nbsp; &nbsp;<br>        driver-class-name: com.mysql.cj.jdbc.Driver &nbsp; &nbsp;<br>        username: root &nbsp; &nbsp;<br>        password: 123456</pre>



<h1 class="wp-block-heading">第一章 DDL-创建操作</h1>



<h2 class="wp-block-heading">DDL-数据库操作:</h2>



<p>查询:</p>



<p>查询所有数据库：</p>



<pre class="wp-block-preformatted">SHOW DATASHOW;</pre>



<p>查询当前数据库：</p>



<pre class="wp-block-preformatted">SELECT DATABASE();</pre>



<p>创建：</p>



<pre class="wp-block-preformatted">CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];</pre>



<p>删除：</p>



<pre class="wp-block-preformatted">DROP DATABASE [IF EXISTS] 数据库名;</pre>



<p>使用：</p>



<pre class="wp-block-preformatted">USE 数据库名;</pre>



<h2 class="wp-block-heading">DDL-表操作:</h2>



<p>查询:</p>



<p>查询当前数据库所有表：</p>



<pre class="wp-block-preformatted">SHOW TABLE;</pre>



<p>查询表结构：</p>



<pre class="wp-block-preformatted">DESC 表名;</pre>



<p>查询指定表的建表语句：</p>



<pre class="wp-block-preformatted">SHOW CREATE TABLE 表名;</pre>



<p>创建:</p>



<pre class="wp-block-preformatted">CREATE TABLE 表名( 字段名 字段类型 [COMMENT 字段注释]，字段名 字段类型 [COMMENT 字段注释]) [COMMENT 表注释];</pre>



<p>修改:</p>



<p>添加字段：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 ADD 字段名 类型（长度）[COMMENT 注释] [约束];</pre>



<p>修改数据类型：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 MODIFY 字段名 新数据类型（长度）；</pre>



<p>修改字段名和字段类型：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型（长度）[COMMENT 注释] [约束]</pre>



<p>删除字段：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 DROP 字段名;</pre>



<p>修改表名：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 RENAME TO 新表名;</pre>



<p>删除表：</p>



<pre class="wp-block-preformatted">DROP TABLE [IF EXISTS] 表名;</pre>



<p>删除指定表，并重新创建该表：</p>



<pre class="wp-block-preformatted">TRUNCATE 表名;</pre>



<h2 class="wp-block-heading">数值类型：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>类型</th><th>大小</th><th>描述</th></tr></thead><tbody><tr><td>tinyInt</td><td>1</td><td>小整数值</td></tr><tr><td>smallInt</td><td>2</td><td>大整数值</td></tr><tr><td>mediumInt</td><td>3</td><td>大整数值</td></tr><tr><td>int或integer</td><td>4</td><td>大整数值</td></tr><tr><td>bigInt</td><td>8</td><td>极大整数值</td></tr><tr><td>flaoat</td><td>4</td><td>单精度浮点数值</td></tr><tr><td>double</td><td>8</td><td>双精度浮点数值</td></tr><tr><td>decimal</td><td></td><td>小数值（精确定点数）</td></tr></tbody></table></figure>



<p>字符串类型：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>类型</th><th>大小</th><th>描述</th></tr></thead><tbody><tr><td>char</td><td>255</td><td>定长字符串</td></tr><tr><td>varChar</td><td>65535</td><td>边长字符串</td></tr><tr><td>tinyBlob</td><td>255</td><td>不超过255个字符的二进制数</td></tr><tr><td>tinyText</td><td>255</td><td>短文本字符串</td></tr><tr><td>blob</td><td>65535</td><td>二进制形式的长文本数据</td></tr><tr><td>text</td><td>65535</td><td>长文本数据</td></tr><tr><td>mediumBlob</td><td>16777215</td><td>二进制形式的中等长度文本数据</td></tr><tr><td>mediumText</td><td>16777215</td><td>中等长度文本数据</td></tr><tr><td>longBlob</td><td>4294967295</td><td>二进制形式的极大文本数据</td></tr><tr><td>longText</td><td>4294967295</td><td>极大文本数据</td></tr></tbody></table></figure>



<p>日期类型：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>类型</th><th>大小</th><th>格式</th><th>描述</th></tr></thead><tbody><tr><td>DATA</td><td>3</td><td>YYYY-MM-DD</td><td>日期值</td></tr><tr><td>TIME</td><td>3</td><td>HH:MM:SS</td><td>时间值或持续值</td></tr><tr><td>YEAR</td><td>1</td><td>YYYY</td><td>年份值</td></tr><tr><td>DATETIME</td><td>8</td><td>YYYY-MM-DD HH:MM:SS</td><td>混合日期和时间值</td></tr><tr><td>TIMESTAMP</td><td>4</td><td>YYYY-MM-DD HH:MM:SS</td><td>混合日期和时间值，时间戳</td></tr></tbody></table></figure>



<h1 class="wp-block-heading">第二章 DML-更新操作</h1>



<h2 class="wp-block-heading">DML-添加数据:</h2>



<p>给指定字段添加数据：</p>



<pre class="wp-block-preformatted">INSERT INTO 表名 （字段名1，字段名2...）VALUE（值1，值2...）;</pre>



<p>给全部字段添加数据：</p>



<pre class="wp-block-preformatted">INSERT INTO 表名 VALUE（值1，值2...）;</pre>



<p>添加批量数据： I</p>



<pre class="wp-block-preformatted">NSERT INTO 表名（字段名1，字段名2）VALUES（值1，值2...），（1，值2...）;<br><br>NISERT NITO 表名 VALUE（值1，值2...）（值1，值2...）;</pre>



<h2 class="wp-block-heading">DML-修改数据:</h2>



<pre class="wp-block-preformatted">UPDATE 表名 SET 字段名1=值1;字段名2=值2，...[WHERE 条件];</pre>



<h2 class="wp-block-heading">DML-删除数据</h2>



<pre class="wp-block-preformatted">DELETE FROM 表名 [WHERE 条件];</pre>



<h1 class="wp-block-heading">第三章 DQL-查询操作</h1>



<h2 class="wp-block-heading">语法：</h2>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表  LIMIT 分页参数</pre>



<p>执行顺序： FROM-&gt;WHERE-&gt;GROUP BY-&gt;HAVING-&gt;SELECT-&gt;ORDER BY-&gt;LIMIT</p>



<h2 class="wp-block-heading">DQL-基本查询：</h2>



<p>查询多个字段：</p>



<pre class="wp-block-preformatted">SELECT 字段1，字段2...FROM 表名;<br><br>SELECT * FROM 表名;</pre>



<p>设置别名：</p>



<pre class="wp-block-preformatted">SELECT 字段1[AS 别名]，字段2[AS 别名2]...FROM 表名;</pre>



<p>去除重复记录：</p>



<pre class="wp-block-preformatted">SELECT DISTINCT 字段列表 FROM 表名;</pre>



<h2 class="wp-block-heading">DQL-条件查询：</h2>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表名 WHERE 条件列表;</pre>



<p>条件：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>比较运算符</strong></th><th><strong>功能</strong></th></tr></thead><tbody><tr><td>&gt;</td><td>大于</td></tr><tr><td>&gt;=</td><td>大于等于</td></tr><tr><td>&lt;</td><td>小于</td></tr><tr><td>&lt;=</td><td>小于等于</td></tr><tr><td>=</td><td>等于</td></tr><tr><td>&lt;&gt;或!=</td><td>不等于</td></tr><tr><td>BETWEEN&#8230;AND</td><td>在某个范围之间（最小值，最大值）</td></tr><tr><td>IN(&#8230;)</td><td>在in之后的列表中的值，多选一</td></tr><tr><td>LIKE 占位符</td><td>模糊匹配（匹配单个字符，%匹配任意个字符）</td></tr><tr><td>IS NULL</td><td>是NULL</td></tr><tr><td>AND 或 &amp;&amp;</td><td>并且（多个条件同时成立）</td></tr><tr><td>OR 或 ||</td><td>或者（多个条件任意一个成立）</td></tr><tr><td>NOT 或 !</td><td>非，不是</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">DQL-聚合查询：</h2>



<pre class="wp-block-preformatted">SELECT 聚合查询（字段列表） FROM 表名;</pre>



<p>聚合函数：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>函数</strong></th><th><strong>功能</strong></th></tr></thead><tbody><tr><td>count</td><td>统计数量</td></tr><tr><td>max</td><td>最大值</td></tr><tr><td>min</td><td>最小值</td></tr><tr><td>avg</td><td>平均数</td></tr><tr><td>sum</td><td>求和</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">DQL-分组查询：</h2>



<pre class="wp-block-preformatted">SELECT字段列表 FROM 表名[WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];</pre>



<p>where: 过滤后分组，不可用聚合函数</p>



<p>having 分组后过滤，可用聚合函数</p>



<h2 class="wp-block-heading">DQL-排序查询:</h2>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1，字段2 排序方式2;</pre>



<p>排序方式： ASC 升序（默认值）</p>



<p>DESC 降序</p>



<h2 class="wp-block-heading">DQL-分页查询：</h2>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表名 LIMIT 起始索引，查询记录数;(起始索引为0，不同数据库略有不同，如查询为第一页，则起始索引可省略)</pre>



<h1 class="wp-block-heading">第四章 DCL-管理数据库</h1>



<h2 class="wp-block-heading">DCL-管理用户：</h2>



<p>查询用户：</p>



<pre class="wp-block-preformatted">USE mysql;<br>SELECT * FROM user;</pre>



<p>创建用户：</p>



<pre class="wp-block-preformatted">CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';</pre>



<p>修改用户密码：</p>



<pre class="wp-block-preformatted">ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';</pre>



<p>删除用户：</p>



<pre class="wp-block-preformatted">DROP USER '用户名'@'主机名';</pre>



<h2 class="wp-block-heading">DCL-权限控制：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>权限</th><th>说明</th></tr></thead><tbody><tr><td>ALL,ALL PRIVILEGES</td><td>所有权限</td></tr><tr><td>SELECT</td><td>查询数据</td></tr><tr><td>INSERT</td><td>插入数据</td></tr><tr><td>UPDATE</td><td>修改数据</td></tr><tr><td>DELETE</td><td>删除数据</td></tr><tr><td>ALTER</td><td>修改表</td></tr><tr><td>DROP</td><td>删除数据库/表/视图</td></tr><tr><td>CREATE</td><td>创建数据库/表</td></tr></tbody></table></figure>



<p>查询权限：</p>



<pre class="wp-block-preformatted">SHOW GRANTS FOR '用户名'@'主机名';</pre>



<p>授予权限:</p>



<pre class="wp-block-preformatted">GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';</pre>



<p>撤销权限：</p>



<pre class="wp-block-preformatted">REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';</pre>



<h1 class="wp-block-heading">第五章 函数</h1>



<h2 class="wp-block-heading">字符串函数：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>函数</th><th>功能</th></tr></thead><tbody><tr><td>CONCAT(S1,S2&#8230;Sn)</td><td>字符串拼接，将S1,S2&#8230;Sn拼接成一个字符串</td></tr><tr><td>LOWER(str)</td><td>将字符串str全部转换为小写</td></tr><tr><td>UPPER(str)</td><td>将字符串str全部转换为大写</td></tr><tr><td>LPAD(str,n,pad)</td><td>左填充，用字符串pad对str的左边进行填充，达到n个字符串长度</td></tr><tr><td>RPAD(str,n,pad)</td><td>右填充，用字符串pad对str的右边进行填充，达到n个字符串长度</td></tr><tr><td>TRIM(str)</td><td>去掉字符串头部和尾部的空格</td></tr><tr><td>SUBSTRING(str,start,len)</td><td>返回从字符串str从start位置起的len个长度的字符串</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">数值函数：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>函数</th><th>功能</th></tr></thead><tbody><tr><td>CEIL(x)</td><td>向上取整</td></tr><tr><td>FLOOR(x)</td><td>向下取整</td></tr><tr><td>MOD(x,y)</td><td>返回x/y的模</td></tr><tr><td>RAND()</td><td>返回0~1内的随机数</td></tr><tr><td>ROUND(x,y)</td><td>求参数x的四舍五入的值，保留y位小数</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">日期函数：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>函数</th><th>功能</th></tr></thead><tbody><tr><td>CURDATE()</td><td>返回当前日期</td></tr><tr><td>CURTIME()</td><td>返回当前时间</td></tr><tr><td>NOW()</td><td>返回当前日期和时间</td></tr><tr><td>YEAR(date)</td><td>获取指定date的年份</td></tr><tr><td>MOUNTH(date)</td><td>获取指定date的月份</td></tr><tr><td>DAY(date)</td><td>获取指定date的日期</td></tr><tr><td>DATE_ADD(date,INTERVAL expr type)</td><td>返回一个日期/时间值+时间间隔expert后的时间值</td></tr><tr><td>DATEDIFF(date1,date2)</td><td>返回起始时间date1和结束时间date2之间的天数</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">流程函数：</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>函数</th><th>功能</th></tr></thead><tbody><tr><td>IF(value,t,f)</td><td>如果value为true，则返回t，否则返回f</td></tr><tr><td>IFNULL(value1,value2)</td><td>如果value1不为空，返回value1，否者返回value2</td></tr><tr><td>CASE WHERE [val1] THEN [val2] &#8230;ELSE[default] END</td><td>如果val1为true，返回res1，&#8230;否则返回default默认值</td></tr><tr><td>CASE [expe] WHEN [val1] THEN [val2] &#8230;ELSE[default] END</td><td>如果expr的值等于val1，返回res1，&#8230;否则返回default默认值</td></tr></tbody></table></figure>



<h1 class="wp-block-heading">第六章 约束</h1>



<h2 class="wp-block-heading">基础约束：</h2>



<p>说明：约束作用于表中字段上，可以在创建表/修改表的时候添加约束</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>约束</th><th>描述</th><th>关键字</th></tr></thead><tbody><tr><td>非空约束</td><td>限制该字段的数据不为null</td><td>NOT NULL</td></tr><tr><td>唯一约束</td><td>保证该字段的所有数据都是唯一，不重复的</td><td>UNIQUE</td></tr><tr><td>主键约束</td><td>主键是一行数据的唯一标识，要求非空且唯一</td><td>PRUMARY KEY</td></tr><tr><td>默认约束</td><td>保存数据时，如果未指定该字段的值，则采用默认值</td><td>DEFAULT</td></tr><tr><td>检查约束(8.0.16版本后)</td><td>保证字段值满足某一个条件</td><td>CHECK</td></tr><tr><td>外键约束</td><td>用来让两张表的数据之间建立连接，保证数据的一致性和完整性</td><td>FOREIGN KEY</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">外键约束：</h2>



<p>语法：</p>



<p>添加外键：</p>



<pre class="wp-block-preformatted">#创建表时添加<br>CREATE TABLE 表名(<br>    字段名 数据类型<br>    ...<br>    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);<br>)</pre>



<pre class="wp-block-preformatted">#创建表后添加<br>ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);</pre>



<p>删除外键：</p>



<pre class="wp-block-preformatted">ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;</pre>



<p>更新删除行为：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>行为</th><th>说明</th></tr></thead><tbody><tr><td>NO ACTION</td><td>当在父表中删除/更新对应记录时，首先检查该记录是否有对应外键，如果有则不允许删除/更新。(与RESTRICT一致)</td></tr><tr><td>RESTRICT</td><td>当在父表中删除/更新对应记录时，首先检查该记录是否有对应外键，如果有则不允许删除/更新。(与NO ACTION一致)</td></tr><tr><td>CASCADE</td><td>当在父表中删除/更新对应记录时，首先检查该记录是否有对应外键，如果有，则也删除/更新外键在子表中的记录。</td></tr><tr><td>SET NULL</td><td>当在父表中删除对应记录时，首先检查该记录是否有外键，如果有，则设置子表中的该外键值为null(要求外键值可为null)</td></tr><tr><td>SET DEFAULT</td><td>父表有更变时，子表将外键列设置成一个默认的值(innodb不支持)</td></tr></tbody></table></figure>



<pre class="wp-block-preformatted">#设置更新/删除行为<br>ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;</pre>



<h1 class="wp-block-heading">第七章 多表查询</h1>



<h2 class="wp-block-heading">内连接：</h2>



<p>说明：连接结果为两表交集部分</p>



<p>隐式内连接：</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表1，表2 WHERE 条件...;</pre>



<p>显示内连接：</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;</pre>



<h2 class="wp-block-heading">外连接：</h2>



<p>说明：查询左/右表全部数据，包含两表交集部分</p>



<p>左连接：</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;</pre>



<p>右外连接：</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;</pre>



<h2 class="wp-block-heading">自连接：</h2>



<p>说明：可以是内连接查询，也可是外连接查询</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;</pre>



<h2 class="wp-block-heading">联合查询：</h2>



<p>说明：联合查询需要保证各表查询列数与字段类型保持一致，union会将合并后的数据去重，union all则不会</p>



<pre class="wp-block-preformatted">SELECT 字段列表 FROM 表A ...<br>UNION [ALL]<br>SELECT 字段列表 FROM 表B ...;</pre>



<h2 class="wp-block-heading">子查询：</h2>



<p>说明：在sql语句中嵌套SELECT语句，称为嵌套查询或子查询</p>



<pre class="wp-block-preformatted">SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);</pre>



<p>子查询外部语句可以是INSERT/UPDATE/SELECT的任何一个</p>



<p>根据子查询的查询结果不同，分为：</p>



<ul class="wp-block-list">
<li>标量子查询(查询结果为单个值) 常用操作符：=, &lt;&gt;, &gt;, &gt;=, &lt;, &lt;=</li>



<li>列子查询(查询结果为一列) 常用操作符：IN, NOT, IN ANY, SOME, ALL</li>



<li>行子查询(查询结果为一行) 常用操作符：=, &lt;&gt;, IN, NOT, IN</li>



<li>表子查询(查询结果为多行多列) 常用操作符：IN</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>操作符</th><th>描述</th></tr></thead><tbody><tr><td>IN</td><td>在指定的集合范围之内，多选一</td></tr><tr><td>NOT IN</td><td>在不指定的集合范围之内</td></tr><tr><td>ANY</td><td>子查询返回列表中，有任意一个满足即可</td></tr><tr><td>SOME</td><td>与ANY相同，使用SOME的地方都可以使用ANY</td></tr><tr><td>ALL</td><td>子查询返回列表的所有值都必须满足</td></tr></tbody></table></figure>



<p>子查询位置：</p>



<ul class="wp-block-list">
<li>WHERE之后</li>



<li>FROM之后</li>



<li>SELECT之后</li>
</ul>



<h1 class="wp-block-heading">第八章 事务</h1>



<h2 class="wp-block-heading">事务操作：</h2>



<p>查看/设置事务提交方式：</p>



<pre class="wp-block-preformatted">SELECT @@autocommit; #查看事务提交方式<br>SET @@autocommit=0;  #设置事务提交方式</pre>



<p>开启事务：</p>



<pre class="wp-block-preformatted">START TRANSACTION 或 BEGIN</pre>



<p>提交事务：</p>



<pre class="wp-block-preformatted">COMMIT;</pre>



<p>回滚事务：</p>



<pre class="wp-block-preformatted">ROLLBACK;</pre>



<h2 class="wp-block-heading">事务隔离级别：</h2>



<p>查看事务隔离级别：</p>



<pre class="wp-block-preformatted">SELECT @@TRANSACTION_ISOLATION;</pre>



<p>设置事务隔离级别：</p>



<pre class="wp-block-preformatted">SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} #隔离级别依次为：读未提交 | 读已提交-解决脏读 | 可重复读-解决不可重复读 | 串行化-解决幻读</pre>



<p><a href="#top">返回顶部</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.qiqin-chang.cn/37/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
