【Access】Access:SQL 语句汇总
目录
一、SQL 的功能
二、考试重点
三、关系的定义
(1)新建关系
(2)删除关系
四、SQL 的「数据查询」功能
(1)基本结构
① Select 语句的基本结构
② Select 子句
③ Where 子句
④ 空值的处理
(2)聚集函数
① Select 子句
② Group By 子句
③ Having 子句
④ Order By 子句
⑤ 空值的处理
(3)集合运算
① From 子句:笛卡儿积
② From 子句
(4)连接关系
① 条件连接 / 内连接
② 外连接
③ 左外连接
④ 右外连接
⑤ 左 / 右外连接
⑥ 全外连接
五、SQL 的「数据修改」功能
(1)插入:Insert 语句
① 格式一
② 格式二
(2)删除:Delete 语句
(3)更新:Update 语句
六、汇总
① 创建表格
② 插入数据
③ 查询数据
④ 更新数据
⑤ 删除数据
⑥ 连接数据
⑦ 排序数据
⑧ 分组数据
⑨ 创建索引
⑩ 删除索引
一、SQL 的功能
SQL 功能 | 操作语句 | 备注 |
数据定义 | CREATE,ALTER,DROP | |
数据查询 | SELECT | 数据查询与数据修改又合并称为数据操纵 |
数据修改 | INSERT,UPDATE,DELETE | |
数据控制 | GRANT,REVOKE,…… |
二、考试重点
【Access】win 10 / win 11:Access 下载、安装、使用教程(「管理信息系统」实践专用软件)https://gusanshang.blog.csdn.net/article/details/130353056【本科自考】
自考院校:[508] 610 华南师范大学(面向社会)
自考专业:[080901] 计算机科学与技术
自考科目:[02383] 管理信息系统
自考方式:上机实践考核
自考工具:Access
① Excel 数据导入
② 创建表 create table
③ 单表查询 select from where group by having order by
- 集合函数
④ 多表查询
- 笛卡儿积
- 条件链接\内连接
- 左外连接、右外连接、全外连接(没有)
- 嵌套查询
⑤ 数据的增删改 update、delete、insert
三、关系的定义
(1)新建关系
新建关系:即新建数据库中的表,命令格式如下
create table 关系名(属性名 域 [default 缺省值] [not null ]{ , 属性名 域 [default 缺省值] [not null ] } [ , primary key (属性名 {, 属性名}) ]{ , foreign key (属性名 {, 属性名}) references 被参照关系名 (属性名 {, 属性名}) }[ , check (条件) ] )
示例 1:
create table S (SNAME PERSON-NAME not null ,AGE SMALLINT default 22,SEX VARCHAR (1),primary key (SNAME ),check ( AGE<200 and AGE>0 ))
示例 2:
create table R ( SName VARCHAR(4), CName VARCHAR(4),RESULT INT,primary key (SName, CName),foreign key (SName) references S (SName),check ( (RESULT IS NULL) OR(RESULT BETWEEN 0 AND 100) ) )
(2)删除关系
删除关系:即删除数据库中的表 ,命令格式如下
drop table 关系名
【注意 Warning! 】
删除关系的定义后,关系的结构和内容、相关索引、以及由它导出的视图都被删除。
示例:
drop table SC
四、SQL 的「数据查询」功能
- 基本结构
- 聚集函数
- 集合运算
- 连接关系
(1)基本结构
① Select 语句的基本结构
语义次序:
From (取出R1表中的记录) → Where (选择符合条件的行) → Select (选择显示的列)
② Select 子句
作用:从 (From 子句列出的) 关系中选出指定属性
要点:属性列表中,可以用表达式来构造的新属性
- 相当于广义投影运算
示例:
- S: 学生关系
- 问:所有学生的姓名和年龄?
Select 姓名, 年龄 From S
- 问: 每个学生的出生年份
Select 姓名, 2020 - 年龄 From S
用表达式构造的新属性无属性名,但可采用以下方式命名 表达式 as 属性名 原有属性也可用如下方式重新命名 旧属性名 as 新属性名 示例:
Select 姓名 as 学生姓名, 2020 - 年龄 as 出生年份 From S
要点:Select 后面,属性列表前,可加上关键字 all 或者distinct
- all 关键字表明结果中不消去重复元组
- distinct 关键字表明结果中消去重复元组
- 没说明 all 或 distinct 的情况下,默认是 all ,即不消去重复行
示例:
Select all 课程 From R
Select distinct 课程 From R
③ Where 子句
作用:选出满足条件的行
- 等价于选择运算
【Where 子句】条件中的运算符号 运算符号 格式 示例 备注 比较运算符 ①<
②<=
③>
④>=
⑤<>逻辑运算符 ① and
② or
③ not范围运算 ① between 下界 and 上界
② not between 下界 and 上界① 年龄 between 20 and 23
② 年龄 between 23 and 20(下界<上界) 集合运算 ① in 集合
② not in 集合① 姓名 in { '小陈’ , '小李’ }
② 姓名 not in { '小陈’ , '小李’ }匹配运算 ① like 匹配串
② not like 匹配串① 姓名 like '陈*’
② 姓名 like '陈??’① 'wh*' 将找到 what、white 和 why,但找不到 awhile 或watch
② ? 匹配任意单个字母字符
③ %代表任意多个字符
示例:
- S :学生关系
- 问:所有男学生的信息?
Select * From S Where 性别='男'
- 问:所有大于 22 岁的男学生的信息?
Select * From S Where 性别='男' and 年龄>22
④ 空值的处理
空值判定
A is [not ] null
判断指定 A(属性,表达式等)的值是否为空值
示例:
- 找出年龄值未知的员工姓名
- 正确语法
Select 姓名 From employee Where 年龄 is null
- 错误语法
Select 姓名 From employee Where 年龄= null
(2)聚集函数
① Select 子句
- sum(字段):对字段的所有值求和,忽略空值
- avg(字段):对字段的所有值求平均值,忽略空值
- count(*) :统计记录的总数 count(字段):统计字段值的总数,忽略空值
- max(字段):对字段的所有值求最大值,忽略空值
- min(字段):对字段的所有值求最小值,忽略空值
② Group By 子句
Group By 子句的作用:在 Where 子句筛选出元组后,对它们分组
- 分组属性: 属性1,属性2,……
同时 Select 子句的作用发生变化:对分组进行统计
1. 每个分组在结果中被统计为一个元组
2. 在 Select 子句出现的属性只能是:
① 分组属性
② 聚集函数(任意属性)
③ 由①和②组成的表达式
示例:
- 关系 R: 选修成绩
- 问: 每门课程的平均和最高成绩?
Select 课程, Avg(成绩) as 平均成绩, Max(成绩) as 最高成绩 From R Group By 课程
③ Having 子句
出现在 Group By 子句后面:
- Having 子句只能配合 Group By 子句使用,而不能单独出现
Having 子句作用:在分组后,筛选满足条件 Q 的分组
在分组限定条件中出现的属性只能是以下形式:
① 分组属性
② 聚集函数(任意属性)
Having 子句中的条件和 Where 子句中条件的不同:
1. Where 子句中的条件用于限定元组,施加在单个元组上
- 不满足条件的元组将不会参与到下一步的分组运算 (Group By 子句) 或投影运算 (Select 子句) 等
2. Having 子句中的条件用于限定 Group By 子句产生的各个分组,施加在整个分组上
- 不满足条件的分组,将不会参与下一步的统计运算 (Select 子句)
示例:
- 关系 R: 选修成绩
- 问: 平均成绩大于85的学生姓名?
Select 姓名 From R Group By 姓名 Having Avg(成绩) > 85
- 问: 成绩大于 85 的学生姓名? (对比以上问题)
Select distinct 姓名 From R Where 成绩 > 85
④ Order By 子句
Order By 子句的作用:在 Select 子句得出结果后,对结果进行排序
- 先按属性1的值,升序(asc)或降序(desc)排列,缺省是升序;
- 属性1的值相同时,再按属性2值升序或降序排列…
示例:
R: 选修关系
问: 从高到低列出物理课程的成绩
Select 姓名, 成绩 From R Where 课程='物理' Order By 成绩 desc
⑤ 空值的处理
示例:
Select avg(年龄) as 平均已知年龄, count (年龄) as 已知年龄人数, count (*) as 总人数, min(年龄) as 最小年龄,max(年龄) as 最大年龄 From employee
(3)集合运算
① From 子句:笛卡儿积
示例:
select ∗ from s,sc
② From 子句
要点:From 子句中,关系可用如下方式重命名
旧关系名 新关系名
- 等价于更名运算
- 一个关系在 From 子句中多次出现时,从第二次开始必须重命名
- 关系重命名后,Select 和 Where 子句中的前缀是使用新的关系名
示例:
- 关系 R: 选修成绩
- 问: 谁的物理成绩高于王红的物理成绩?
Select S.姓名 From R, R as S Where R.课程='物理' and R.姓名='王红' and S.课程='物理' and R.成绩 < S.成绩
(4)连接关系
连接类型:
- inner join : 内连接,结果不包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
- outer join : 外连接,结果包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
- left outer join : 左外连接,结果包含左边关系的失配元组
- right outer join : 右外连接,结果包含右边关系的失配元组
- full outer join : 全外连接,结果包含两边关系的失配元组
① 条件连接 / 内连接
示例:
select ∗ from s,sc where s.sno=sc.sno
select ∗ from s inner join sc on s.sno=sc.sno
② 外连接
示例:
select ∗ from s right outer join sc on s.sno=sc.sno
select ∗ from sc left outer join s on s.sno=sc.sno
③ 左外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp left outer join Dept on Emp.部门号=Dept.部门号
④ 右外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp right outer join Dept on Emp.部门号=Dept.部门号
⑤ 左 / 右外连接
示例:
select ∗ from s left outer join sc on s.sno=sc.sno
select ∗ from sc right outer join s on s.sno=sc.sno
⑥ 全外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp full outer join Dept on Emp.部门号=Dept.部门号
五、SQL 的「数据修改」功能
- 插入:Insert 语句
- 删除:Delete 语句
- 更新:Update 语句
(1)插入:Insert 语句
① 格式一
注意:
- 所列值的个数必须和属性的个数相等,且一一对应
- 在插入的新元组中,对没有指定的属性填入缺省值(Create Table时定义),没有缺省值时填入空值
示例:
Insert Into R Values (‘刘朝', '物理', 80)
示例:
- 新建表 S
Create Table Student (学号 VARCHAR (4),姓名 VARCHAR(10) not null,年龄 SMALLINT default 22,班级 VARCHAR(20) )
- 在 S 中插入元组
Insert Into Student (学号, 姓名) Values (1, '小刘')
② 格式二
注意:
同样地,对其它的属性填入缺省值或空值
示例:
- 添加所有学生选修数学课程的信息
Insert Into R(姓名, 课程) Select 姓名,课程 From S, C Where 课程='数学'
(2)删除:Delete 语句
说明:
- 在关系中找到满足条件的元组,并删除之
- 如果没有 Where 子句,表示删除关系的全部元组 (保留结构)
- 一次只能删除一个关系中的元组
示例:
- 删除全部选修信息
Delete From R
(3)更新:Update 语句
说明:
- 在关系中找到满足条件的元组,然后更新:表达式1的值赋予属性1;表达式2的值赋予属性2……
- 没有 Where 子句时,则对关系的全部元组都要更新
示例:
- 给销售部门的职工增加10%的工资
Update employ Set 工资=工资*1.1 Where 部门='销售'
六、汇总
具体 SQL 实战操作查看我的另一博文:
【Access】实战:Access 操作 SQL 「学生」
① 创建表格
CREATE TABLE table_name
( column1 datatype, column2 datatype, column3 datatype, ..... );
② 插入数据
INSERT INTO table_name (column1, column2, column3, ....)
VALUES (value1, value2, value3, ....);
③ 查询数据
SELECT column1, column2, ...
FROM table_name
WHERE condition;
④ 更新数据
UPDATE table_name
SET column1 = value1, column2 = value2, ....
WHERE condition;
⑤ 删除数据
DELETE FROM table_name
WHERE condition;
⑥ 连接数据
SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
⑦ 排序数据
SELECT column1, column2, ...
FROM table_name
ORDER BY column1
ASC/DESC, column2
ASC/DESC, ...;
⑧ 分组数据
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1;
⑨ 创建索引
CREATE INDEX index_name ON table_name
(column1, column2, ...);
⑩ 删除索引
DROP INDEX index_name ON table_name;
相关文章:
【Access】Access:SQL 语句汇总
目录 一、SQL 的功能 二、考试重点 三、关系的定义 (1)新建关系 (2)删除关系 四、SQL 的「数据查询」功能 (1)基本结构 ① Select 语句的基本结构 ② Select 子句 ③ Where 子句 ④ 空值的处…...
【小样本分割 2022 ECCV】SSP
文章目录 【小样本分割 2022 ECCV】SSP摘要1. 介绍2. 相关工作3. 自支持小样本语义分割3.1 动机3.2 自支持原型-SSM3.3 自适应自支持背景原型-ASBP3.4 自支持匹配-SSL 3. 代码 【小样本分割 2022 ECCV】SSP 论文题目:Self-Support Few-Shot Semantic Segmentation 中…...
Friendlycore增加inodes数量
背景:为Nanopim1安装了core系统,tf卡大小64G,安装后正常扩展到了整个tf卡,但是在安装hass的docker显示磁盘空间不够,最终发现是inode被用完了。其inode只有960K,但是16G卡树莓派系统的inodes都是其两倍。 一…...
Latex 定理和证明类环境(amsthm)和(ntheorm)的区别
最近在写毕业论文,出现了一些定理和证明的环境的问题,问题出现在对两个包的理解程度不够的问题上: \RequirePackage{ntheorem} 1、\newtheorem*{proof}{\hspace{2em}证:} 这个是让证明失去计数原则,该命令不能用于 amsthm 2…...
Yolov8改进---注意力全家桶,小目标涨点
💡💡💡💡💡💡💡💡💡💡注意力全家桶💡💡💡💡💡💡💡💡💡💡💡 基于Yolov8的注意力机制研究,提升小目标、遮挡物、难样本等检测性能...
[Linux]网络连接、资源共享
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…...
来上海一个月的记录、思考和感悟
作者 | gongyouliu 编辑 | gongyouliu 从4月3号早上来上海,到今天差不多整整一个月了,也是自己正式从杭州离职创业(我更愿意称之为自由职业者,毕竟我没有招聘全职员工,有两个朋友业余时间在帮我)的第一个月…...
学校信息化管理系统通常包含哪些功能?
学校管理信息化是现代教育发展的必然趋势,随着信息技术的飞速发展,学校管理也逐渐地实现了信息化。信息化的学校管理已经成为教育现代化建设的重要内容,也是提高学校教育教学质量和保障学生安全的重要手段。 作为一款低代码开发平台…...
Java时间类(三) -- Calendar()(日历类)
java.util.Calendar类是一个抽象类,它提供了日期计算的相关功能、获取或设置各种日历字段的方法。 protected Calendar() 构造方法为protected修饰,无法直接创建该对象。1. Calendar()的常用方法: 方法名说明static Calendar getInstance()使用默认时区和区域获取日历vo…...
【五一创作】QML、Qt Quick /Qt中绘制圆形
目录标题 Qt Quick中绘制圆形扩展知识Canvas 模块介绍Shapes 模块介绍 Qt Widgets 中绘制圆形两种方式的比较 Qt Quick中绘制圆形 有多种方法可以在 Qt Quick 中绘制圆形。以下是一些主要方法: 使用 Canvas 元素 使用 Shapes 模块: a. 使用 PathArc 和…...
【软考数据库】第七章 关系数据库
目录 7.1 关系数据库概述 7.2 关系代数 7.3 元组演算与域演算 7.4 查询优化 7.5 关系数据库设计 7.6 模式分解 前言: 笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。 7.1 关系数据…...
《SpringBoot中间件设计与实战》第1章 什么是中间件
一、写在前面 在互联网应用初期,所有用于支撑系统建设的,框架结构、基础工具、业务逻辑、功能服务包括页面展示等,都是在一个系统中开发完成,最终也只是把系统和数据库部署在同一台服务器上。也就是大多数开发者入门所接触到的 “单体” 系统。 那为什么会有中间件这个玩…...
spring常用的事务传播行为
事务传播行为介绍 Spring中的7个事务传播行为: 事务行为 说明 PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务 PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行 PROPAGATION_MANDATORY…...
【Python】什么是爬虫,爬虫实例
有s表示加密的访问方式 一、初识爬虫 什么是爬虫 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略爬虫可以做什么 你可以…...
JavaScript学习笔记(三)
文章目录 第7章:迭代器与生成器1. 迭代器模式2. 生成器 第8章:对象、类与面向对象编程1. 理解对象2. 创建对象3. 继承:依靠原型链实现4. 类class 第10章:函数1. 函数定义的方式有:函数声明、函数表达式、箭头函数&…...
文鼎创智能物联云原生容器化平台实践
作者:sekfung,深圳市文鼎创数据科技有限公司研发工程师,负责公司物联网终端平台的开发,稳定性建设,容器化上云工作,擅长使用 GO、Java 开发分布式系统,持续关注分布式,云原生等前沿技…...
深入了解SpringMVC框架,探究其优缺点、作用以及使用方法
一、什么是Spring MVC SpringMVC是一种基于Java的Web框架,与Spring框架紧密结合,用于开发具备WebApp特性的Java应用程序。Spring MVC是Spring Framework的一部分,因此它具有与Spring框架相同的特性和理念。 二、SpringMVC的优缺点 1. 优点…...
Git教程(一)
1、Git概述 1.1 、Git历史 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)…...
数据结构篇三:双向循环链表
文章目录 前言双向链表的结构功能的解析及实现1. 双向链表的创建2. 创建头节点(初始化)3. 创建新结点4. 尾插5. 尾删6. 头插7. 头删8. 查找9. 在pos位置前插入10. 删除pos位置的结点11. 销毁 代码实现1.ListNode.h2. ListNode.c3. test.c 总结 前言 前面…...
day10 TCP是如何实现可靠传输的
TCP最主要的特点 1、TCP是面向连接的运输层协议。( 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)) 2、TCP提供可靠交付的服务。 3、TCP提供全双工通信。 4…...
Python | 人脸识别系统 — 背景模糊
本博客为人脸识别系统的背景模糊代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for user logining 注意:阅读本博客前请先参考以下博客 工具安装、环境配置:人脸…...
YOLOv5+单目测量物体尺寸(python)
YOLOv5单目测量尺寸(python) 1. 相关配置2. 测距原理3. 相机标定3.1:标定方法1(针对图片)3.2:标定方法2(针对视频) 4. 相机测距4.1 测距添加4.2 细节修改(可忽略…...
C++异常
C异常 提到异常,大家一定不陌生,在学习new关键字的时候就提到了开空间失败会导致抛异常。其实异常在我们生活中的使用是很多的,有些时候程序发生错误以后我们并不希望程序就直接退出,针对不同的情况,我们更希望有不同的…...
Java中的字符串是如何处理的?
Java中的字符串是通过字符串对象来处理的。字符串是一个类,可以创建一个字符串对象,并在该对象上调用一系列方法来操作该字符串。 Java中的字符串是不可变的,这意味着一旦创建了一个字符串对象,就无法修改它的值。任何对字符串对…...
【热门框架】怎样使用Mybatis-Plus制作标准的分页功能
使用 Mybatis-Plus 实现标准的分页功能需要使用 Page 类来进行分页操作。具体步骤如下: 引入 Mybatis-Plus 依赖 在 Maven 项目中,在 pom.xml 文件中引入 Mybatis-Plus 的依赖: <dependency><groupId>com.baomidou</groupId&g…...
Java方法引用:提高代码可读性和可维护性
前言 在Java 8中,可以使用方法引用(Method Reference)来简化Lambda表达式。方法引用是一种更简洁易懂的语法形式,可以通过指定方法的名称代替Lambda表达式。 本文将介绍方法引用的用法和实现原理,并结合代码案例详细…...
如何使用CSS和JS实现一个响应式的滚动时间轴
随着互联网的发展,网站的界面设计越来越重要。吸引用户的关注、提高用户体验已经成为了许多网站的目标。而在实现各种复杂的界面效果中,CSS与JS的组合无疑是开发者的得力工具。本文将介绍如何使用CSS和JS实现一个响应式的滚动时间轴。 1.需求分析 在开…...
Feign组件的使用及开发中使用方式
在微服务的服务集群中服务与服务之间需要调用暴露的服务.那么就需要在服务内部发送http请求, 我们可以使用较为老的HttpClient实现,也可以使用SpringCloud提供的RestTemplate类调用对应的方法来发送对应的请求。 说明: 现在有两个微服务一个是…...
html css 面试题
1. 如何理解HTML语义化 1,可读性,易读性 2,seo搜索引擎更容易读懂 2,哪些是块元素,哪些是内联元素 1:div,h1,table,ul,p 2:span, img…...
LeetCode_双指针_中等_24.两两交换链表中的节点
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1&a…...
广东佛山如何制作网站公司/google app
1.简单工厂模式 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 注意: 实际上简单工厂不是一个设计模式,更多程度上比较像一种编程习惯。 结构图: Factory:工厂类ÿ…...
做网站前端需要编程基础吗/湖南网站营销seo多少费用
SharePoint 运行状况分析器已检测到一些值得关注的关键问题。其中一条为: 作为管理员,我如何能知道哪些地方用到了这个WebPart呢? Google搜索到2条很有用的途径。 1、通过stsadm来查找webpart的引用状况。 stsadm -o enumallwebs -includeweb…...
义乌市网站制作/全网优化哪家好
Android编程中,ScrollView嵌套ListView时,会无法正确的计算ListView的大小。解决的办法如下: (非原创,网上搜到的解决方法) public class MainActivity extends Activity { private ListView listView; …...
网站诊断方案/学校seo推广培训班
Redhat Linux网卡及IP设置单网卡多IP例:将eht0 添加新地址 eth0:1拷贝/etc/sysconfig/network-scripts/ifcfg-eth0文件为ifcfg-eth0:1修改其中DEVICEeth0:1根据需要修改IP地址(IPADD)和掩码(NETMASK),可以删除NETWORK、BROADCAST、HWADDR重启网络服务#service netwo…...
南阳建网站企业/百度学术论文查重官网
NPM酷库,每天两分钟,了解一个流行NPM库。 JSON是JS中数据交换时最常用的数据格式,其序列话和反序列化性能非常好,但是其语法却比较严格,比如以下是一个合法的JS声明,却不是一个合法的JSON: { fo…...
日本韩国出线了吗/宁波seo推广推荐公司
SPRING循环依赖(circular reference)的解决方法参考文章: (1)SPRING循环依赖(circular reference)的解决方法 (2)https://www.cnblogs.com/IcreamPrince/p/4040995.html 备忘一下。...