===================

数据库软件:

数据库: 保存特定类型数据的容器

表: 特定类型数据的结构化清单

模式: 关于数据库和表的布局及特性的信息

列: 表中的一个字段,

行: 表中的一个字段,表中的数据都是按行存储的,,一行表示一条记录。

数据类型: 所容许的数据的类型。不同列具有不同的数据类型。

数据类型: 数据类型可限制存储在列中的数据类型,防止出错。

主键: 表中的每一行都应该有唯一标识自己的一行/一列。

主键: 一列/一组列,其值能够唯一标识表中的每一行记录

主键: 任意两行都不能具有相同的主键;

主键: 每行都必须具有一个主键值,主键值列不允许NULL值。

SQL: 结构化查询语言,

MYSQL: 是一种DBMS,数据库管理软件。

DBMS分两类: 1.基于共享文件系统的DBMS,2.基于客户机-服务器的DBMS.

MYSQL Administrator 是一个图形交互客户机

Server Information(服务器信息): 显示客户机和被连接的服务器的状态和版本信息。

Server Control(服务控制): 允许停止/启动Mysql以及指定服务器特性。

User Administration(用户管理): 用来定义MYsql用户/登陆和权限。

Catalogs(目录): 列出可用的数据库并允许创建数据库和表。

MYSQL Query Browser: 图形交互机,用来编写和执行mysql命令。

/=操作数据库命令=\\\\\

显示所有数据库: SHOW DATABASES;

显示所有数据表: SHOW TABLES;

显示某个数据表的所有列记录: SHOW COLUMNS FROM db_tables;

显示广泛的服务器状态信息: SHOW STATUS;

显示授予用户的安全权限: SHOW GRANTS;

显示错误: SHOW ERRORS;

显示警告: SHOW WARNINGS;

显示show 更多命令帮助: HELP SHOW;

第4章

多条sql语句以分号;分隔。

SQL语句不区分大小写。

所有空格都被忽略。

检索多个列,使用相同的select语句,必须在select关键字后面给出多个列名,以逗号分隔。

检索所有列:SELECT * FROM db_table;

检索列中不重复的值,使用distinct(不同的)。distinct不能部分使用。

select distinct user_name from db_tables;

限制结果:limit子句;SELECT user_name from db_table LIMIT 5; 限制不多于行。

limit 3,4; 从第三行开始返回4行数据。

使用完全限定的表名:

//数据库:league, 数据表:db_table, 列字段:user_name,legends

SELECT db_table.user_name FROM db_table;

SELECT db_table.user_name FROM league.db_table;

第5章

排序数据 oerder by子句

子句(clause):SQL语句由子句构成

order by子句可以取一个列或多个列的名字,据此对输出进行排序

SELECT prod_id,prod_price,prod_name

FROM products

ORDER BY prod_price,prod_name;

//先根据价格,后根据名称排序。

指定排序方向:

默认是升序排序:ASC

还可以降序排序:DESC

SELECT prod_id,prod_price,prod_name

FROM products

ORDER BY prod_price DESC,prod_name;

//按价格降序,名称没有指定,所以默认升序。

SELECT prod_id,prod_price,prod_name

FROM products

ORDER BY prod_price DESC,prod_name LIMIT 1;

//只返回一行数据。

order by 子句位于from子句之后;

limit子句必须位于order by之后。

where子句位于from子句之后,order by子句之前。

第6章

过滤数据 where子句

搜索条件(search criteria)

过滤条件(filter condition)

SELECT prod_name,prod_price

FROM product

WHERE prod_price = 2.50;

//只返回价格为2.50的数据。

where子句的操作符:

= 等于

<> 不等于

!= 不等于

< 小于

> 大于

<= 小于等于

>= 大于等于

between 在指定的两个值之间

检查单个值:

SELECT prod_name,prod_price

FROM products

WHERE prod_name = 'apple';

检查价格小于10的产品:

SELECT prod_name, prod_price

FROM products

WHERE prod_price < 10;

不匹配检查:

SELECT prod_id,prod_name,prod_price

FROM products

WHERE prod_id <>1001;

如果将值与字符串进行比较,字符串需要加引号。

范围值检查:

BETWEEN 子句

SELECT prod_name,prod_price

FROM products

WHERE price BETWEEN 5 AND 10;

空值检查:

NULL 无值(no value) 它不是0,空字符串,也不是空格

SELECT pro_name FROM products WHERE prod_price IS NULL;

第7章

数据过滤

mysql允许给出多个where子句。

以and子句或者or子句的方式使用。

操作符(operator):用来联结或改变where子句中的关键字。

AND操作符:同时满足and 两边

SELECT prod_id,prod_name,prod_price

FROM products

WHERE prod_id = 100 AND prod_price <=10;

OR操作符:只需满足条件之一即可

SELECT prod_name,prod_price

FROM products

WHERE prod_id =100 OR prod_id =101;

计算次序

WHERE 子句可包含任意数量的AND和OR操作符。

AND和OR联合同时使用时,优先处理AND子句。

在WHERE子句中使用()圆括号。

IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。

IN取合法值的由逗号分隔的清单,全部在圆括号中。

WHERE pro_name,pro_price

FROM products

WHERE prod_id IN (1001,1015)

ORDER BY prod_price DESC;

IN操作符 和OR操作符具有相同的功能。

IN操作符执行速度比OR更加的快速。

IN操作符可以包含其他的SELECT语句,

能够更加动态的建立WHERE子句。

NOT操作符

where子句中用来否定后面跟的条件的关键字NOT.

SELECT prod_name,prod_price

FROM products

WHERE prod_id NOT IN (1001,1015)

ORDER BY prod_name;

第8章

用通配符进行过滤

LIKE操作符

通配符(wildcard):用来匹配值的一部分的特殊字符。

搜索模式(search pattern):由字面值、通配符或着两者组合构成的搜索条件。

为了使用通配符,必须使用LIKE操作符。

百分号(%)通配符

% 百分号表示任何字符出现任意次数。

SELECT pro_id, prod_name, FROM products

WHERE pro_name LIEK 'app%';

//表示以app开头的单词,app后%表示可以接收任意字符。

%百分号可以在开头,结尾,中间。

下划线通配符 下划线与%百分号用法相同,但下划线只匹配单个字符而不是多个字符。

SELECT pro_id,prod_name

FROM products

WHERE pro_name LIKE '_app';

// _只匹配一个字符,不能多也不能少。

不要过渡使用通配符,通配符使用会导致搜索变慢。

在确实必须使用通配符,才可使用通配符。

第9章

正则表达式,进行搜索

正则表达式,就是用来匹配文本。

mysql正则表达式,仅为正则表达式。

基本字符匹配

regexp正则表达式

匹配不区分大小写

进行OR匹配 |

为了搜索两个字符串之一,使用管道符|

SELECT prod_name

FROM products

WHERE pro_name REGEXP 'apple|huawei'

ORDER BY pro_name;

两个以上的OR条件,可以多次使用管道符|

匹配几个字符之一:指定一组[]括起来的字符完成。

SELECT pro_name

FROM pro_name REGEXP '[123]apple'

ORDER BY prod_name;

[123]apple 等价与 [1|2|3]apple

匹配范围

可以是[012345],[1-5],[6-9],[a-z]

SELECT prod_name

FROM products

WHERE prod_name REGEXP '[1-5]apple'

ORDER BY prod_name;

匹配特殊字符,必须用\\双斜杠为前导。

REGEXP '\\.' 匹配点.

\\f 换页

\\n 换行

\\t 回车

\\v 纵向制表符

\\\ 匹配 \

匹配字符类

[:alnum:] --- 匹配任意字母数字(a-zA-Z0-9)

[:alpha:] --- 任意字母(a-zA-Z)

[:blank:] --- 空格和制表([\\t])

[:cntrl:] --- 匹配ASCII控制符

[:digit:] --- 匹配任意数字

[:graph:] --- 匹配任意可打印字符,不包括空格

[:lower:] --- 匹配任意小写字母

[:print:] --- 匹配任意可打印字符

[:punct:] --- 匹配不在[:alnum:]和[:cntrl:]

[:space:] --- 匹配空格在内的任意空字符(\\f\\n\\r\\t\\v)

[:upper:] --- 匹配大写字母

[:xdigit:] -- 匹配16进制数字

匹配多个实例

* 匹配0个或多个字符

+ 匹配1个或多个字符

? 匹配0个或1个字符

{n} 匹配指定数目的字符

{n,} 匹配不少以指定数目的字符

{n,m} 匹配数目范围的字符

SELECT prod_name

FROM products

WHERE pro_name REGEXP '\\([0-9] sticks?\\)'

ORDER BY pro_name;

解释:

\\( 表示匹配开始

[0-9] 任意数字

sticks? 表示stick或者sticks ;

s后的?表示 s可以有0个,也可以有1个

\\) 表示匹配结束

SELECT prod_name

FROM products

WHERE prod_name REGEXP '[[:digit:]]{4}'

ORDER BY prod_name;

注:[:digit:] 表示匹配任意数字;{4} 确切的要求它前面的字符出现4次

定位符:匹配特定位置的文本

^ 匹配文本开始

$ 匹配文本结尾

[[:<:>

[[:>:]] 匹配词的结尾

SELECT prod_price

FROM prod_price REGEXP '^[0-9\\.]'

ORDER BY prod_price;

匹配以小数点开头的数

第10章

创建计算字段

字段(field):基本上与列(column)的意思相同。

连接字段

连接(concatenate):将值联接到一起构成单个值。

多数DBMS使用+或||来实现拼接,

而Mysql则使用函数Concat()连接。

SELECT Concat(city_name,'(',country_name,')')

FROM tb_country

ORDER BY country_name;

RTrim()函数去掉值右边的所有空格

LTrim()函数去掉值左边的所有空格

别名(alias):是一个字段或值的替换名

对于未命名的列,客户机无法引用它,就需要使用别名

别名使用AS关键字赋予。

SELECT Concat(RTrim(city_name),'(',LTrim(country_name),')')

AS city_country_name

FROM tb_country;

ORDER BY country_name;

执行算术计算

+ 加

_ 减

* 乘

/ 除

第11章

使用函数处理数据

处理文本字符串

数值进行算术运算

处理日期和时间

返回DBMS特定信息

文本处理函数

RTrim() 去掉文本右边的所有空格

LTrim() 去掉文本左边的所有空格

Upper() 将字母全部转换为大写

Lower() 将字母全部转换为小写

Left() 返回字符串左边的字符

Right() 返回字符串右边的字符

Length() 返回字符串的长度

Locate() 找出字符串的一个子字符串

Soundex() 返回字符串的SOUNDEX值

SubString() 返回字符串的子字符

SOUNDEX 是一个将任何文本字符串转换为描述其语音表示的字母数字模式的算法

SOUNDEX 可以进行发音比较而不是字母比较。

日期和时间处理函数

addDate() 添加一个日期(天、周等)

addTime() 添加一个时间(时、分等)

CurDate() 返回当期日期

CurTime() 返回当前时间

Date() 返日期时间的日期部分

DateDiff() 计算两个日期之差

Date_Add() 高度灵活的日期运算函数

Date_Format() 返回一个格式化的日期或时间

Day() 返回一个日期的天数部分

DayOfWeek() 返回格式日期的对应的星期几

Hour() 返回一个时间的小数部分

Minute() 返回一个时间的分钟部分

Month() 返回一个日期的月份部分

Now() 返回当期日期时间

Second() 返回一个时间的秒钟部分

Time() 返回一个日期时间的时间部分

year() 返回一个日期的年份部分

日期格式必须是yyyy-mm-dd

SELECT cust_id,order_num

FROM orders

WHERE order_date = '2015-05-25';

SELECT cust_id,order_num

FROM orders

WHERE Date(order_date) BETWEEN '2015-05-05' AND '2015-05-25';

数值处理函数

Abs() 返回一个数的绝对值

Cos() 返回一个角度的余弦

Exp() 返回一个数的指数值

Mod() 返回除操作的余数

Pi() 返回圆周率

Rand() 返回一个随机树

Sin() 返回一个数的正弦

Sqrt() 返回一个数的平方根

Tan() 返回一个角度的正切

第12章

聚合函数(aggregate):运行在行组上,计算和返回单个值的函数。

AVG() 返回某列的平均值

COUNT() 返回某列的行数

MAX() 返回某列的最大值

MIN() 返回某列的最小值

SUM() 返回某列值之和

AVG()函数会自动忽略值为NULL的行

聚合不同值

DISTINCT 不同的,差别的

SELECT AVG(DISTINCT pro_price) AS avg_price

FROM products

WHERE vend_id = 101;

SELECT COUNT(*) AS num_items,

MAX(prod_price) AS price_max,

MIN(prod_price) AS price_min,

AVG(prod_price) AS price_avg

FROM products;

第13章

分组数据

group by子句 (GROUP BY)

having子句 (HAVING)

SELECT COUNT(*) AS num_prods

FROM products

WHERE vend_id =110;

创建分组:group by

SELECT vend_id,COUNT(*) AS num_prods

FROM products

GROUP BY vend_id;

过滤分组:having

SELECT cust_id, COUNT() AS orders

FROM orders

GROUP BY cust_id

HAVING COUNT() >= 2;

分组和排序

分组:group by

排序:order by

SELECT order_num,SUM(quantityitem_price) AS ordertotal

FROM orderitems

GROUP BY order_num

HAVING SUM(quantityitem_price) >= 50;

ORDER BY ordertotal;

select……as……from……where……group by……having……order by…… limit……

子句

SELECT 要返回的列或表达式

FROM 要检索的数据表

WHERE 行级过滤

GROUP BY 分组说明

HAVING 分组过滤

ORDER BY 输出排序

LIMIT 要检索的行数

ASC 升序

DESC 降序

第14章

子句查询

查询(Query):任何sql语句都是查询。

sql还允许创建子查询(subquery),即嵌套在其他查询中的查询。

可以利用子查询进行过滤数据操作

子查询总是从内向外处理。

SELECT prod_price

FROM products

WHERE

可以利用子查询进行计算字段操作

相关子查询(correlated subquery):设计到外部查询的子查询。

第15章

联结(join):用于把来自两个或多个表的行结合起来

关系表

外键(foreign key):定义了两个表之间的关系,一个表的中的列,包含另一个表的主键值。

可伸缩性(scale):能够适应不断增加的工作量而不失败。

当数据存储在多个表中,使用联结的方式就可以实现查询出多个表中的数据。

创建联结:

SELECT prod_name,prod_price,vend_name

FROM products,vendors

WHERE vendors.vend_id = products.prod_id

ORDER BY vend_name,prod_name

使用完全限定列名:表名.列名

等值联结(equijoin):基于两个表之间的相等测试。 也称:内部联结

第16章

聚集函数的联结:

SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num)

FROM customers INNER JOIN orders

ON customers.cust_id = orders.cust_id

GROUP BY customers.cust_id;

第17章

组合查询union

执行多个查询语句,并将结果作为单个查询返回

使用UNION,在SELECT 语句之间放关键字UNION

SELECT vend_id,prod_id,prod_price

FROM products

WHERE prod_price <= 5;

UNION

SELECT vend_id,prod_id,prod_price

FROM products

WHERE vend_id IN (1001,1002)

UNION必须由两条以上的SELECT语句组词,语句之间用关键字UNION

UNION中的每个查询必须包含相同的列,表达式或集合函数

列数据类型必须兼容,但不必完全相同

第18章

全文本搜索

第19章

数据的插入insert

插入完整的行

插入行的一部分数据

插入多行

插入某些查询的结果

INSERT INTO Students VALUES(

100,

"小明",

"一班");

完整的插入方式

INSERT INTO Students(

stu_id,

stu_name,

stu_class)

VALUES(

100,

"小明",

"一班");

第20章

更新和删除数据update

UPDATE Students

SET stu_class = '二年级1班'

WHERE stu_id = '100';

如果要删除某列的特定行的值,可以使用UPDATE更新为NULL.

删除表中的数据delete

DELETE FROM students WHERE stu_id = '100';

删除表中的全部数据:truncate table 语句

第21章

创建表

CREATE TABLE tb_name(

cust_id INT NOT NULL AUTO_INCREMENT,

cust_name CHAR(50) NOT NULL,

cust_addr CHAR(50) NULL DEFAULT '1',

PRIMARY KEY(cust_id)

) ENGINE = InnoDB;

NULL 可以为空值(没有任何)

NOT NULL 不能为空值

PRIMARY KEY 表示主键,主键必须唯一。

AUTO_INCREMENT 自动生成创建

DEFAULT 这种默认值

引擎类型:ENGINE = InnoDB 是一个可靠的事务处理引擎,不支持全文搜索。

更新表(插入列/删除列)

为了更新表定义,可以使用ALERT TABLE语句。

插入列:ALERT TABLE tb_name ADD cust_phone CHAR(20);

删除列:ALERT TABLE tb_name DROP COLUMN cust_phone;

alert table的常见用途是定义外键。

删除表:DROP TABLE tb_name;

重命名:RENAME TABLE tb_old_name to tb_new_naem;

第22章

视图

视图是基于 SQL 语句的结果集的可视化的表

视图是虚拟的表,视图只包含使用时动态检索数据的查询结果.

视图并不在数据库中以存储的数据值集形式存在.

视图必须唯一命名

视图可以嵌套,不能被索引,也不能有关联的触发器或默认值

视图用create view 语句来创建

使用SHOW CREATE VIEW viewname;查看创建视图的语句.

使用DROP删除视图,其语法为DROP VIEW viewname;

CREATE VIEW productcustomers AS

SELECT cust_name,cust_contact,prod_id

FROM customers, orers,orderitems

WHERE customers.cust_id = orders.cust_id

AND orderitems.order_num = order.order_num;

以上创建一个名为productcustomers的视图,它联结3个表.

视图如果进行了:

分组,联结,子查询,并,聚集函数,DISTINCT,导出,则不能进行更新

第23章

存储过程

经常需要执行多条语句才能完成一个完整的操作,就需要存储过程.

存储过程:就是为了以后的使用而保存的一条或多条sql语句的集合.

1.通过吧处理封装在容易使用的单元中,简化操作.

2.保证数据完整性,简化对变动的管理,提供性能.

MYSQL执行存储过程的语句为CALL

CALL productpricing(@pricelow,

@pricehigh,

@priceaverage);

其中执行名为productpricing的存储过程,

计算并返回产品的最低,最高,平均价格.

创建存储过程:create procedure

CREATE PROCEDURE productpricing()

BEGIN

SELECT Avg(prod_price) AS priceaverage

FROM products;

END;

删除存储过程:drop procedure

DROP PROCEDURE productpricing;

检查存储过程: SHOW CREATE PROCEDURE productpricing;

获得创建的详细信息存储过程列表:show procedure status;

第25章

触发器

当某个表发生更改时自动处理.

触发器是mysql响应一下任意语句(DELETE,INSERT,UPDATE)而自动执行的一条语句

触发器位于BEGIN和END语句之间的一组语句.

创建触发器:

1.唯一的触发器名;2.触发器关联的表;3.触发器响应的活动(insert,delete,update)

4.触发器何时执行.

触发器仅仅支持表,不支持视图

INSERT 触发器:

CREATE TRIGGER neworder AFTER INSERT ON orders

FOR EACH ROW SELECT NEW.order_num;

DELETE触发器:

CREATE TRIGGER deleteorder BEFORE DELETE ON orders

FOR EACH ROW

BEGIN

INSERT INTO archive_orders(order_num,order_date,cust_id)

VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);

END;

UPDATE触发器

CREATE TRIGGER updatevender BEFORE UPDATE ON venders

FOR EACH ROW SET NEW.vend_state = Uppder(NEW.vend_state);

创建用户账户

CREATE USER语句

CREATE USER anna IDENTIFIED BY '123456';

删除用户账户

DROP USER anna;

设置访问权限

SHOW GRANTS FOR anna;

GRANT SELECT ON crashcourse.* TO anna;

更改密码

SET PASSWORD FOR anna = password('654321');

诊断启动问题

--help显示帮助

--safe-mode装载减去某些最佳配置的服务器.

--verbose显示全文本消息

--version显示版本信息然后退出.

查看日志文件

错误日志:hostname.err,位于data目录.

此错误日志名可以用--log-error命令更改.

查询日志:hostname.log.位于data目录中.

此查询名字可用--log命令更改.

缓慢查询日志: hostname-slow.log,位于data目录.

prooerties mysql_mysql数据库操作相关知识--读书笔记分享相关推荐

  1. 数据库及相关知识详解大全

    友情提示以下内容是对数据库以及相关知识所做的一个阐述,内容较多需多花费些各位看官宝贵时间,不过全是干货以及一些小的实例,我相信各位点进来的看官都会有所收获. 数据库介绍 什么是数据库? 数据库(Dat ...

  2. 软件开发相关的读书笔记 问题与方法

    软件开发相关的读书笔记 问题与方法 https://www.zybuluo.com/UDvoid/note/45720 标签: 读书笔记 软件开发 关于银弹的讨论 [No Silver Bullet: ...

  3. 《计算机基础知识》读后感300字,计算机知识读书笔记

    计算机知识读书笔记 计算机基础知识学习包括学电脑入门教程,电脑技巧,网络技术,办公软件,操作系统,视频教程等.以下是小编搜集并整理的计算机知识读书笔记有关内容,希望在阅读之余对大家能有所帮助! 计算机 ...

  4. 【分享】《小强升职记》读书笔记分享1

    寻找种子,确定方向 >>>>精彩语句 1.      盲目,是阻止快速成长的关键因素. 2.      机遇只会眷顾那些有准备的人呢. 3.      衡量一件事情是不是有意义 ...

  5. 【分享】《小强升职记》读书笔记分享4

    抽出绿叶,积极主动 看完本章内容,自己最受感触的一点就是--主动性. 先从"听话的孩子"说起吧.从小学到中学,相信老师都喜欢听话的孩子,因为我也算是这么一个孩子吧,老师说让什么时候 ...

  6. 【分享】《小强升职记》读书笔记分享5

    习惯让你开花结果 19世纪最伟大的小提琴家萨拉萨蒂,曾被媒体称为天才,对此萨拉萨蒂说:"天才?!37年来我每天苦练14小时,现在却叫我天才?!". 世界上最伟大的推销员之一Joe ...

  7. “Oracle数据库并行执行”技术白皮书读书笔记

    本文为白皮书Parallel Execution with Oracle Database(2019年2月20日版本)的读书笔记. 简介 数据快速增长,但业务仍要求数据的快速处理. 并行执行是大规模数 ...

  8. Oracle自治数据库技术概要白皮书读书笔记

    下载地址.版本为:March, 2022, Version 2.1 副标题: A fully autonomous, mission-critical Oracle database service ...

  9. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

     1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...

最新文章

  1. redhat 7.3 mysql_RedHat7.3安装MySQL5.7
  2. php向ldap插入数据,给LDAP添加用户,构造用户文件,然后使用phpLadpadmin导入
  3. 分布式数据库一定会替代Oracle吗?
  4. linux数字雨代码解释,linux提权 漏洞合集 linux-kernel-exploits
  5. OPENSTACK重装系统失败导致虚拟机状态为error
  6. 什么软件可以测试小米四进水没有声音,小米5手机进水不用怕!牢记4个步骤救活手机...
  7. JSF 中使用自定义Navigation
  8. 简单的优化mysql,提高查询性能
  9. mysql服务器架构_Mysql的主从服务器架构配置
  10. Sql 正确删除用户过期的数据
  11. hive调优fetch模式抓取,join表测试空key自动转换random,mapreduce动态分区设置
  12. TCP全连接端口扫描器
  13. Druid (大数据实时统计分析数据存储)
  14. 阿里云DDoS防护产品介绍
  15. H3C 40MHz频宽模式
  16. via自定义搜索引擎代码_VIA浏览器自定义logo设置
  17. CSS中如何让背景颜色半透明
  18. [转] Carmack 谈 d3d 与 ogl, 定位专业应用的OpenGL, 专注娱乐应用的DirectX, 未来:OpenGL、DirectX并行发展...
  19. 来了解一下最新Amy联/通免流
  20. 物联网“遇上”云原生,会擦出怎样的火花?

热门文章

  1. NOIP 2013 华容道
  2. 量子纠缠在量子计算机中的作用,量子计算机的强大,为什么需要量子纠缠
  3. 麦克风声源定位原理_基于麦克风阵列的声源定位算法之GCC-PHAT
  4. Android广播接收者使用总结
  5. xls文件的上传和下载
  6. shell编程—tomcat自动发包详解
  7. 20170908一些随笔感悟
  8. JSF pickList
  9. uni-app 图片懒加载
  10. 【C++复习总结回顾】—— 【一】基础知识+字符串/string类