SqlServer数据库复习总结资料

基于课堂上学到的以及书上的看到的,总结出的数据库复习资料

一、数据库概述

  • 基本概念

1.数据
数据(Data)是事物的符号表示,可以是声音、图像、文字、数字,也可以是计算机代码。
2.数据库
数据库(DataBase,DB)是一个长期存储在计算机内的,有组织的、共享的、统一管理的数据集合。具有较小的冗余、较高的数据独立性和易扩展性,并可以为各种用户共享。
3.数据库管理系统
数据库管理系统(DataBase Management System,DBMS)是位于用户和操作系统之间的一个数据管理软件,用于建立、使用和维护数据库,可以理解为用户与数据库的接口。
DBMS的主要功能有:
① 数据定义功能:提供数据定义语言,定义数据库和数据库对象
②数据操纵功能:提供数据操纵语言,对数据进行增删改查等操作
③数据控制功能:提供数据控制语言,提供数据的安全性、完整性、并发控制等功能
④数据库建立维护功能
4.数据库管理员
数据库管理员(DataBase Administrator,DBA)是一个负责管理和维护数据库服务器的人。
5.数据库系统
数据库系统(DataBase System,DBS),又称数据库应用系统,是由数据库(DB)、操作系统、数据库管理系统(DBMS)、数据库应用程序、用户、数据库管理员组成的用于存储、管理、处理和维护数据的系统。
这就是数据库系统的结构:
在这里插入图片描述

  • 数据管理技术的发展

数据管理技术的发展经历了人工管理阶段、文件系统阶段、数据库系统阶段

  • 三级模式结构

模式是指对数据的逻辑结构或物理结构、数据特征、数据约束的定义和描述。模式是对数据的一种抽象,模式反映数据的本质、核心或类型等方面。
数据库系统是三级模式结构,分别是外模式、模式、内模式
①外模式又称子模式或用户模式,是三级模式的最外层,一个数据库可以有多个外模式,但一个应用程序只能使用一个外模式。
②模式又称概念模式或逻辑模式,位于中间层,一个数据库只有一个模式。
③内模式又称存储模式,位于底层,一个数据库只有一个内模式。

  • 二级映射

数据库管理系统在这三级模式之间提供了两级映射:外模式/模式映射、模式/内模式映射

  • 数据模型

在开发设计数据库应用系统时需要使用不同的数据模型,分别是概念数据模型、逻辑数据模型、物理数据模型
1.概念数据模型
面向现实世界建模,通过各种概念来描述现实世界的事物以及事物之间的联系,主要用于数据库设计。最常用的概念模型是E-R模型(实体-联系模型)。
2.逻辑数据模型
面向用户建模,是事物及事物之间联系的数据描述,提供了表示和组织数据的方法。主要的逻辑模型有层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型和半结构化数据模型等。
3.物理数据模型
面向计算机系统的,是对数据底层的抽象,它描述数据在系统内部的表示方法和存取方法。

  • 概念模型

概念模型又称信息模型,是现实世界到机器世界的一个中间层次。
有以下概念:
1.实体
客观存在并可以相互区别的事物称为实体。实体可以是具体的人、事、物或抽象的概念,实体用矩形框表示。
2.属性
实体所具有的某一特性称为属性。属性采用椭圆框表示。
3.码
能唯一标识实体的最小属性集,又称为键或关键字。
4.实体型
用实体名及其属性集合来抽象和刻画同类实体。如学生(姓名,学号,性别)。
5.实体集
同类型的实体的集合称为实体集。如全体学生记录就是一个实体集。
6.域
属性的取值范围称为该属性的域。
7.联系
两个实体集之间的联系包括一对一联系、一对多联系、多对多联系。
联系由菱形框表示。

  • 关系数据库

1.概念
数据模型是严格定义的一组概念的集合,一般由数据结构(静态)、数据操作(动态)、数据完整性约束三部分组成。
通常数据库的类型是按照数据所存储的结构的类型来命名的数据模型,常见的数据模型有层次模型、网状模型、关系模型和面向对象模型。最常用的是关系模型。关系模型是指用二维表的形式表示实体以及实体间联系的数据模型,一个关系就是一张二维表。
关系数据库系统是支持关系模型的数据库系统。

2.基本名词
①元组:关系表中每一横行称作一个元组,也称为记录。
②属性:每一列称为一个属性,也称为字段。
③候选码、主码、全码

  • 数据库设计

数据库系统设计基本步骤分为:
①需求分析阶段
②概念设计阶段
③逻辑设计阶段
④物理设计阶段
⑤数据库实施阶段
⑥运行和维护阶段

二、数据库管理

  • SQL Server数据库概述

SQL(Structured Query Language)语言,即结构化查询语言,是关系数据库的标准语言,是一种高级的非过程化编程语言。
SQL语言分为四类:
①数据定义语言(Data Definition Language,DDL),用于定义数据库对象,如表、视图、索引等数据库对象,包括create、alter、drop等语句。
②数据操纵语言(Data Manipulation Language,DML),包括insert、update、delete等语句。
③数据查询语言(Data Query Language,DQL),select语句。
④数据控制语言(Data Control Language,DCL),用于控制用户对数据库的操作权限,包括grant、revoke等语句。
1.逻辑数据库
组成数据库的逻辑成分称为数据库对象,常用的数据库对象包括表、视图、索引、存储过程、触发器等。

SQL Server的数据库有两类:系统数据库、用户数据库。
SQL Server在安装时自动创建5个系统数据库:master、model、msdb、tempdb、resource(不可见)

2.物理数据库
SQL Server的物理数据库架构包括页和区、数据库文件、数据库文件组等。

(1)页和区是SQL Server数据库的两个主要数据存储单位。
:用于数据存储的最基本单位。每个页的大小是8KB,每1MB的数据文件可以容纳128页。(1MB=1024KB)
:用于控制表和索引的存储。每8个连接的页组成一个区,区的大小是64KB,1MB的数据库有16个区。

(2)SQL Server采用操作系统文件来存放数据库,使用的文件有主数据文件、辅助数据文件、日志文件。
主数据文件:用于存储数据,一个数据库只能有一个主文件,默认扩展名为.mdf。
辅助/次要数据文件:用于存储数据,可以创建多个或不创建,默认扩展名为.ndf。
日志文件:用于保存恢复数据库所需的事务日志信息,一个数据库至少有一个或多个日志文件,默认扩展名为.ldf。

(3)SQL Server提供了两类文件组,主文件组和用户定义文件组。
主文件组(PRIMARY 文件组):由系统定义,里面包含主要数据文件和次要数据文件。每个数据库有一个主文件组,主文件组也是默认文件组。
用户定义文件组:由用户定义,用于将多个次要数据文件集合起来。
一个数据文件只能属于一个文件组,事务日志文件不能属于任何文件组。

  • 创建数据库
create database 数据库名
on [ primary ]
( name='逻辑名',
filename='物理名'
[ ,size=自定义容量 ]
[ ,maxsize=最大容量 / unlimited ]
[ ,filegrowth=增长量 [KB/MB/GB/TB/%] ] ),filegroup 自定义文件组名
( name='逻辑名',
filename='物理名.ndf'
[ ,size=自定义容量 ]
[ ,maxsize=最大容量 / unlimited ]
[ ,filegrowth=增长量 [KB/MB/GB/TB/%] ] ) log on
( name='逻辑名',
filename='物理名.ldf'
[ ,size=自定义容量 ]
[ ,maxsize=最大容量 / unlimited ]
[ ,filegrowth=增长量 [KB/MB/GB/TB/%] ] )
  • 选择数据库
use 数据库名
  • 查看数据库
sp_helpdb 数据库名> 或者
> 查看所有数据库信息
sp_helpdb
  • 修改数据库
alter database 数据库名> 增加数据文件到数据库add file (数据文件信息...)[ to filegroup 文件组名 ]> 增加事务日志文件到数据库add log file (数据文件信息...)> 删除文件remove file 逻辑名> 增加文件组add filegroup 文件组名> 删除文件组(且文件组为空)remove filegroup 文件组名> 更改文件属性(且一次只能改一个)modify file (数据文件信息...)> 更改数据库名称modify name=新数据库名

eg:

--********** create student database **********--
--********** Begin **********--
create database student
on primary
(name='studentdata1',filename='/home/studentdata1.mdf',size=5mb,maxsize=10mb,filegrowth=1mb
),
filegroup fg1
(name='studentdata2',filename='/home/studentdata2.ndf',size=5mb,maxsize=10mb,filegrowth=1mb
)
log on(name='studentlog1',filename='/home/studentlog1.ldf',size=5mb,maxsize=10mb,filegrowth=1mb
)
--********** End **********--
go
--********** add database file **********--
--********** Begin **********--
alter database student
add file
(name='studentdata3',filename='/home/studentlog3.ndf',size=6mb,maxsize=20mb,filegrowth=1mb
)
--********** End **********--
go
--********** add database log file **********--
--********** Begin **********--
alter database student
add log file
(name='studentlog2',filename='/home/studentlog2.ldf',size=6mb,maxsize=20mb,filegrowth=1mb
)
--********** End **********--
go
--********** alter database file **********--
--********** Begin **********--
alter database student
modify file
(name='studentdata3',size=8mb,maxsize=30mb
)
--********** End **********--
go
  • 收缩数据库

> 自动收缩数据库
alter database 数据库名 set auto_shrink on> 自定义收缩数据库( 使其还剩百分之n可用 )
dbcc shrinkdatabase ( 数据库名,收缩的百分比 )> 自定义收缩文件
dbcc shrinkfile ( 逻辑名,文件大小 )
  • 删除数据库
drop database 数据库名
  • 分离和附加数据库
> 分离数据库
exec sp_detach_db [@dbname=] '数据库名'> 附加数据库
exec sp_attach_db [@dbname=] '数据库名',[@filename1=]'物理名.mdf'

三、表的管理

  • 相关概念

(1)数据完整性
①实体完整性 / 行完整性:用来保证表中每一行数据在表中是唯一的。措施:primary key约束,unique约束,identity列。
②域完整性 / 列完整性:用来保证数据表特定列输入的有效性与正确性,指数据库中的数据列必须满足某种特定的数据类型和数据约束。措施:限制数据的类型或格式,check约束,default约束,not null约束或规则。
③参照完整性 / 引用完整性:建立在外键与主键或外键与唯一键之间的一种引用规则,确保主表的数据与从表的数据的一致性。措施:foreign key约束。
④用户定义完整性

(2)主键和外键
一个表中只能有一个主键,且定义表时先定义主键再定义外键。

(3)数据类型
整型、浮点型、字符型、日期和时间型、货币型、二进制型、其他数据类型。

  • 约束

①check约束
用于限制一列或多列输入的值的范围。(and or in)
②default约束
没有指定数据时自动赋默认值。
③primary key约束
将表中的一列或多列的组合设置为主键。一个表只能有一个主键,且主键列不能为空不能重复。
④foreign key约束
将表中的一列或多列的组合设置为表的外键,一个表的外键必须是另一个表的主键。外键所在的表为从表,主键所在的表为主表,从表的外键列只能插入所参照的主表的主键列存在的值。
⑤unique约束
用于确保表中的两个数据行在非主键列中没有相同的列值,保证数据唯一性,可为空。一个表中可以定义多个unique约束。

  • 创建表
create table 表名
( 列名 类型 [ not null / null ] [ 约束 ],
列名 类型 [ not null / null ] [ 约束 ] )

例如:

create table 选课
( 课程号 tinyint primary key,
学号 char(8) [ foreign key ]references 
学生(学号),
成绩 int check(成绩>=0 and 成绩<=100),
课程名 char(10) unique,
学分 decimal(3,1) default 4.0 )

(只是举个栗子,表明约束的用法及格式,逻辑上并不一定正确,课程名和学分本应该在课程表里)


> 设置多个主键,primary key( 列名1,列名2 )> 表级约束(多个列一起检查)
eg: ,订购日期<=发货日期
  • 修改表
alter table 表名> 修改列的定义alter column 列名 数据类型 [ null/not null ]> 增加列add 列名 数据类型 [ null/not null ] [ 约束 ][,列名 数据类型...]> 删除列drop column 列名 [,...]> 增加约束add constraint 约束名 约束 [,...]> 删除约束drop constraint 约束名 [,...]
  • 数据的插入

> 插入一条数据insert (into) 表名 values('值','值','值') > 插入多条数据
insert (into) 表名 values('值','值','值') ,('值','值','值')> 指定列名
insert (into) 表名 (列名,列名,列名) values('值','值','值') 
  • 数据的删除

> 删除所有记录
delete from 表名> 删除指定记录
delete from 表名 where 列名='值'
  • 数据的修改

> 修改某一条数据
update 表名
set 要修改的列的名='新的值'
where 另一条列名='值'

四、查询

  • 基本查询

> 查询全部信息
select * from 表名> 带限制条件的查询
select top 行数 列名 from 表名> 表达式查询
select 包含列名的表达式 as 新列名 from 表名> 使用where语句进行检索where 列名 between 数字1 and 数字2(检索列在数字1~数字2里的内容)where 列名 <> '值'  (检索列除了'值'里的内容)

> 检索表 Products 中所有不以 B 为起始字符的产品的所有内容。select * from Products
where prod_name like '[^B]%'
  • 多表连接

自连接

自连接可以将一个表与它自身连接,若要在一个表中查找具有相同列值的行,可以使用自连接。使用自连接时需要为表指定两个别名,且对所有列的引用均要用别名限定。

select a.学号,a.课程号,b.课程号,a.成绩
from 成绩表 join 成绩表
on a.学号 = b.学号 and a.课程号 != b.课程号

自然连接和等值连接的区别

1.自然连接一定是等值连接,但等值连接不一定是自然连接
2.等值连接要求相等的分量不一定是公共属性;而自然连接要求相等的分量必须是公共属性
3.等值连接不会去除重复的属性;而自然连接去除重复的属性

五、索引

按照存储结构的不同,可以将索引分为两类:聚集索引、非聚集索引。
每个表只能有一个聚集索引,每个表中最多可以创建249个非聚集索引。

1.创建索引


> 创建非聚集索引
create (nonclustered) index index_name
on table_name(字段名)> 创建唯一聚集索引
create unique clustered index index_name
on table_name(字段名)

2.查看索引

exec sp_helpindex 表名

在这里插入图片描述
3.删除索引

drop index table_name.index_name(,table_name.index_name)

在这里插入图片描述

六、T-SQL程序设计

1.系统函数

  • 字符串函数
    (“表达式”用~符号代替省略了)
字符串函数功能
ascii(字符表达式)返回最左边字符的ASCII码 eg:select ASCII('A')
char(整型表达式)返回ASCII码对应的字符eg:select CHAR(66)
space(整型表达式)返回n个空格,n为整型表达式的值eg:print SPACE(3)+'嗨'
len(字符表达式)返回字符的个数eg:print len('T-SQL语言')
right(字符~ ,整型~)返回字符~ 中最右边的n个字符,n为整型~的值
left(字符~ ,整型~)返回字符~ 中最左边的n个字符,n为整型~的值

流程控制语句

  • waitfor语句

可使用waitfor语句延迟或暂停程序的执行

waitfor delay 'time' / time 'time'
> 修改SQL身份验证的用户sa的登录密码beginwaitfor time '22:44'exec sp_password '123456','12345','sa'
end

sp_password为系统存储过程,后面的参数分别为:‘旧密码’,‘新密码’,‘用户名’
亲测程序会一直显示正在执行查询,直到自己指定的时间点。
在这里插入图片描述

> 五秒后,执行SQL语句waitfor delay '00:00:05'
select * from Student

delay指等待指定的时间间隔,最高可达24小时。
在这里插入图片描述

七、存储过程

存储过程案例:

USE studentdb
goSET NOCOUNT ON 
go
--********** create proc_student_info **********--
--********** Begin **********--
create procedure proc_student_info
as
Begin
select * from student
End--********** End **********--
go
exec proc_student_info
go--********** create proc_sno **********--
--********** Begin **********--create proc proc_sno
@xuehao varchar(20)
as
Begin
select * from student where sno=@xuehao
End
--********** End **********--
go
exec proc_sno '1001'
go--********** create proc_add **********--
--********** Begin **********--create proc proc_add
@no varchar(20),@name varchar(20),@sex1 varchar(20),@birth date,
@dis varchar(50),@sch varchar(50)
as
insert into student(sno,sname,sex,birthday,discipline,school)
values(@no,@name,@sex1,@birth,@dis,@sch)--********** End **********--
go
exec proc_add '1004','HMM','female','2019-6-2','English','national school'
go
exec proc_student_info
go
--********** create student_del **********--
--********** Begin **********--
create proc student_del
@no varchar(20)
as
begin
if exists(select @no from student where sno=@no)begindelete from student where sno=@noprint'sucessfully deleted'end
elsebeginprint'No such student'end
end
--********** End **********--
go
exec student_del '1001'
go
exec proc_student_info
go

八、触发器

  • 使用DDL触发器
create trigger table_1 on database
after alter_table,drop_table
as
beginprint'不能对表进行删除或者修改'rollback transaction
end
godrop table consumer

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/281135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch之诗词生成6--eval

先上代码&#xff1a; import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

JavaSE:数据类型与变量

目录 一、前言 二、数据类型与变量 &#xff08;一&#xff09;字面常量 &#xff08;二&#xff09;数据类型 &#xff08;三&#xff09;变量 1.变量概念 2.语法格式 3.整型变量 3.1整型变量 3.2长整型变量 3.3短整型变量 3.4字节型变量 4.浮点型变量 4.1双精…

REDHAWK——连接(续)

文章目录 前言一、突发 IO1、数据传输①、输入②、输出 2、突发信号相关信息 (SRI)3、多输出端口4、使用复数数据①、在 C 中转换复数数据 5、时间戳6、端口统计①、C 二、消息传递1、消息生产者①、创建一个消息生产者②、发送消息 2、消息消费者①、创建消息消费者②、注册接…

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

docker的部署与安装以及部署一个docker(容器)应用及docker容器常出现的问题

docker 架构图 一、docker的部署与安装 1、在 CentOS 上安装 Docker 移除旧版本&#xff08;如果有的话&#xff09;&#xff1a;sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-…

MySQL 索引的分类和优化

​ 优质博文&#xff1a;IT-BLOG-CN 索引是什么 &#xff1a; MySQL 官方对索引的定义&#xff1a;索引&#xff08;Index&#xff09;是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质&#xff1a;索引是数据结构。索引的目的在于提高查询效率。可以简单理解为&#…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一&#xff1a; 方法二&#xff08;推荐&#xff09; 将相关资源下载下来&#xff0c;在对应的html文件中相对路径引入。注意&#xff1a;css加载放在js之前

java框架 2 springboot 过滤器 拦截器 异常处理 事务管理 AOP

Filter 过滤器 对所有请求都可以过滤。 实现Filter接口&#xff0c;重写几个方法&#xff0c;加上WebFilter注解&#xff0c;表示拦截哪些路由&#xff0c;如上是所有请求都会拦截。 然后还需要在入口处加上SvlterComponentScan注解&#xff0c;因为Filter是javaweb三大组件之…

基于深度学习的心律异常分类系统设计——算法设计

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

PP-Matting——支持多场景精细化高精度人像抠图(C++模型推理)

简介 Matting和分割是图像处理中两个重要的任务&#xff0c;它们在抠图和图像分析中起着不同的作用。 分割方法将图像分成不同的区域&#xff0c;并为每个像素分配一个分类标签&#xff0c;因此其输出是一个像素级别的分类标签图&#xff0c;通常是整型数据。这种方法适用于将…

有ai写文案的工具吗?分享5款好用的工具!

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已渗透到我们生活的方方面面&#xff0c;包括内容创作领域。AI写文案的软件以其高效、便捷的特点&#xff0c;正逐渐受到广大内容创作者、营销人员、甚至普通用户的青睐。本文将为您盘点几款热门的AI写文案软件&…

matlab 最小二乘拟合圆柱

目录 一、算法原理1、算法简介2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、算法简介 圆柱拟合步骤主要包括两步: 一是确定柱面模型参数初始值; 二是…

记一次由于buff/cache导致服务器内存爆满的问题

目录 前言 复现 登录服务器查看占用内存进程排行 先了解一下什么是buff/cache&#xff1f; 尝试释放buffer/cache /proc/sys/vm/drop_caches dirty_ratio dirty_background_ratio dirty_writeback_centisecs dirty_expire_centisecs drop_caches page-cluster swap…

关于在CentOS中卸载MySQL

想要卸载MySQL当然要知道自己的MySQL是用那种方法来安装的了&#xff0c;一般来说MySQL的安装方法在市面上有三种 编译安装、YUM安装、RPM安装&#xff0c;下面会介绍到后两种安装的卸载方法 首先查看是否安装MySQL&#xff0c;一般可以看到版本信息就证明安装了 mysql -V 卸载…

Linux虚拟主机如何快速卸载一键安装的网站程序

接到一位用户发送的请求帮助&#xff0c;想要卸载通过Softaculous一键安装的网站程序&#xff0c;但是没有找到地方&#xff0c;根据与该用户的沟通得知是一个小白用户&#xff0c;想要自己搭建一个博客类的网站&#xff0c;了解到Hostease 有适合新用户并且带管理面板的产品Li…

nacos 更新报错“发布失败。请检查参数是否正确”

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因解决方案结果 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华…

从底层结构开始学习FPGA(0)----FPGA的硬件架构层次(BEL Site Tile FSR SLR Device)

系列目录与传送门 《从底层结构开始学习FPGA》目录与传送门 Xilinx的FPGA&#xff0c;从硬件架构的角度可以划分为6个层次&#xff0c;从底层到顶层依次是&#xff1a; BEL&#xff08;最底层单元&#xff09;SiteTileFSRSLRDevice&#xff08;FPGA芯片&#xff09; 接下来我…

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久&#xff0c;现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记&#xff0c;方便之后的回顾总结&#xff0c;也让各位网友见证你我的成长&#xff0c;相互学习 止不住的写文止不住的成长&#xff0c;大家共同…