MySQL学习

MySQL学习

— Java攻城狮学习路线 —

入门:
进阶:

1. 简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

1.1 什么是据库?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。基于读写速度考虑,现在使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。其特点为:

  • 数据以表格的形式出现
  • 每行为各种记录
  • 每列为记录所对应的数据项
  • 许多的行和列组成一张表单
  • 若干的表单组成数据库

1.2 RDBMS 术语

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • : 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • :一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

2. 安装

MySQL下载地址:https://www.mysql.com/downloads/

相关安装教程较为简单,可自行查询。

3. 数据库连接

3.1 使用命令连接

Linux和Windows连接方式一样,在命令行输入:

[root@host]# mysql -uroot -p
Enter password:******

登录后成功后输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is XXXXXX to server version: 5.X.X

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

基本操作:

  • 查看帮助:
    • hlep;
    • \h
    • ?加上相关关键字
  • 取消当前命令执行:\c
  • 命令行结束符:
    • ;
    • \g
  • 退出系统:
    • exit
    • quit
    • \q

      3.2 JDBC连接

      利用Java API实现数据库连接,详情见JDBC相关资料。

4. 数据库操作

4.1 创建数据库

使用create关键词创建数据库,database和schema等效。

CREATE DATABASE dbname;
CREATE SCHEMA dbname;

指定编码方式创建数据库。

CREATE DATABASE [IF NOT EXISTS] dbname [DEFAULT] CHARACTER SET [=] utf-8;

4.2 查看数据库

使用show关键字查看当前服务器下全部数据库。

SHOW DATABASE;
SHOW SCHEMA;

4.3 查看数据库详细信息

SHOW CREATE DATABASE dbname;

4.4 修改数据库编码方式

ALTER DATABASE dbname [DEFAULT] CHARACTER SET [=] utf-8;

注:[]表示可以省略

4.5 打开数据库

USE dbname;

4.6 得到当前打开数据库

SELECT DATABASE();
SELECT SCHEMA();

4.7 删除数据库

DROP DATABASE [IF EXISTS] dbname;

5. 注释

两种注释方式。

# 这是一段注释1
-- 这是一段注释2

6. 数据类型

6.1 数值类型

类型大小范围用途
TINYINT1 字节(-128,127)小整数值
SMALLINT2 字节(-32 768,32 767)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)大整数值
INT4 字节(-2 147 483 648,2 147 483 647)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)极大整数值
FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)单精度浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值
DECIMALM,D决定依赖于M和D的值小数值

6.2 字符串类型

类型大小用途
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65 535字节二进制形式的长文本数据
TEXT0-65 535字节长文本数据
MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295字节极大文本数据

6.3 日期和时间类型

类型大小格式用途
DATE3 字节YYYY-MM-DD日期值
TIME3 字节HH:MM:SS时间值或持续时间
YEAR1 字节YYYY年份值
DATETIME8 字节YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP4 字节YYYYMMDD HHMMSS混合日期和时间值,时间戳

7. 数据表操作

数据表由行和列组成,每个数据表中至少有1列,行可以0,1或多行,表名必须唯一,且含义明确。

7.1 创建表

CREATE TABLE [IF NOT EXISTS] tblname(
    字段名称 字段类型 [完整性约束条件],
    字段名称 字段类型 [完整性约束条件],
    字段名称 字段类型 [完整性约束条件],
    ...
)ENGINE=存储引擎 CHARSET=编码方式;

MySQL中在表创建时指定数据项的约束条件:

约束条件作用
UNSIGNED无符号
ZEROFILL零填充
NOT NULL非空
DEFAULT默认值
PRIMARY KEY主键,标识记录唯一性,值不重复且不为空
UNIQUE KEY唯一性
AUTO_INCREMENT自动增长,数值列,配合索引
FOREIGN KEY外键约束
# 实例
CREATE TABLE IF NOT EXISTS `tbl`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `title` VARCHAR(100) NOT NULL,
   `author` VARCHAR(40) NOT NULL,
   `date` DATE,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

7.2 查看表

SHOW [FULL] TABLES [[FROM/IN] dbname] [LIKE 'pattern' / WHERE expr]
#实例
SHOW TABLES;
7.2.1 查看指定数据表的详细信息:
SHOW CREATE TABLE tlbname;
7.2.2 查看表结构:
DESC tblname;
DESCRIBE tblname;
SHOW COLUMNS FROM tblname;

7.4 删除表

DROP TABLE [IF EXISTS] tblname;

7.5 表结构操作

7.5.1 添加字段
ALTER TABLE tblname
ADD 字段名称 字段属性 [完整性约束条件]
[FIRST|AFTER 字段名称];
7.5.2 删除字段
ALTER TABLE tblname
DROP 字段名称;
7.5.3 添加默认值
ALTER TABLE tblname
ALTER 字段名称 SET DEFAULT 默认值;
7.5.4 删除默认值
ALTER TABLE tblname
ALTER 字段名称 DROP DEFAULT;
7.5.5 修改字段类型,属性
ALTER TABLE tblname
MODIFY 字段名称 字段类型 [字段属性] [FIRST|AFTER 字段名称];
7.5.6 修改字段名称、类型、属性
ALTER TABLE tblname
CHANGE 原字段名称 新字段名称 字段类型 字段属性
[FIRST|AFTER 字段名称];
7.5.7 添加主键
ALTER TABLE tblname
ADD PRIMARY KEY(字段名称);
7.5.8 删除主键
ALTER TABLE tblname
DROP PRIMARY KEY;
7.5.9 添加唯一索引
# 1
ALTER TABLE tblname
ADD UNIQUE KEY indexname(字段名称);
# 2
ALTER TABLE tblname
ADD UNIQUE INDEX indexname(字段名称);
7.5.10 删除唯一索引
ALTER TABLE tblname
DROP indexname;
7.5.11 修改数据表名称
# 1
ALTER TABLE tblname
RENAME [TO|AS] newtblname;
# 2
RENAME TABLE tblname TO newtblname;

8. 数据操作

8.1 添加记录

INSERT [INTO] tblname ( field1, field2,...fieldN )
VALUES ( value1, value2,...valueN );
8.1.1 不指定字段名称
INSERT tblname VALUES ( value1, value2,...valueN );
8.1.2 列出指定字段
INSERT tblname ( field1, field2,...fieldN ) 
VALUES ( value1, value2,...valueN );
8.1.3 一次添加多条记录
# 1
INSERT tblname ( field1, field2,...fieldN ) VALUES 
( value1, value2,...valueN ),
( value1, value2,...valueN ),
...
( value1, value2,...valueN );
# 2 
INSERT tblname SET field1 = value1, field2 = value2,...;
# 3
INSERT tblname [(field1, field2,...fieldN)] 
SELECT field1, field2,...fieldN
FROM tblname [WHERE 条件];

8.2 修改记录

# 如果不添加条件,整个表中的记录都会更新
UPDATE tblname SET field1 = value1, field2 = value2,... 
[WHERE 条件];

8.3 删除记录

# 如果不加入条件,所有记录都会删除,增长值不会改变
DELETE FROM tblname [WHERE 条件];
# 设置增长值为1
ALTER TABLE tblname AUTO_INCREMENT = 1;
# 彻底清空数据表
TRUNCATE [TABLE] tblname;

8.4 查询记录

SELECT 条件1,条件2... FROM tblname
[WHERE 条件]
[GROUP BY colname或position HAVING 二次筛选]
[ORDER BY colname,postion或expr [ASC|DESC]]
[LIMIT 限制结果集显示条数];
8.4.1 查询所有记录
SELECT * FROM tblname;
SELECT * FROM dbname.tblname;
8.4.2 指定字段查询
SELECT 字段名称,... FROM tblname;
8.4.3 给字段起别名
SELECT 字段名称,... [AS] 别名名称,... FROM dbname.tblname;
8.4.4 给表起别名
SELECT 字段名称,... FROM tblname [AS] 别名;
8.4.5 WHERE条件筛选记录
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND|OR] condition2.....
操作符号
比较运算符>, >=, <, <=, !=, <> ,<=>
指定范围[NOT] BETWEEN...AND...
指定集合[NOT] IN (value,...)
逻辑运算符AND, OR
匹配字符[NOT] LIKE; % (任意长度字符); _ (任意一个字符)
8.4.6 GROUP BY分组

把值放到一个组中,结果只会显示组中一条记录

  • 配合GROUP_CONCAT()查看组中某个字段的详细信息
SELECT GROUP_CONCAT(username),age,sex,addr
FROM tblname
GROUP BY sex;
  • 配合聚合函数使用
    COUNT()统计总数; SUM()求和; MAX()最大值; MIN()最小值; AVG()平均值 注:COUNT(字段名称),不统计值为NULL记录; COUNT(*)统计所有
SELECT sex, username, COUNT(*) FROM tblname
GROUP BY sex;
  • 配合WITH ROLLUP使用,在记录末尾添加一条,为所有记录总和
SELECT sex, username FROM tblname
GROUP BY sex
WITH ROLLUP;
  • HAVING字句对分组结果进行二次筛选
SELECT sex, username FROM tblname
GROUP BY sex
HAVING sex = '男';
8.4.7 ORDER BY排序
# 默认排序为升序 ASC,可指定降序 DESC
# 1.按照多个字段排序
SELECT id, username, age
FROM tblname
ORDER BY age ASC, id ASC;
# 2.随机排序
SELECT id, username, age
FROM tblname
ORDER BY RAND();
8.4.8 LIMIT 限制结果集展示条数
# 1.显示前count条记录
SELECT * FROM tblname
LIMIT count;
# 2. 从offset页开始,显示count条记录
# offset从0开始编号
SELECT * FROM tblname
LIMIT offset, count;

8.5 多表查询

8.5.1 笛卡尔积形式
# 列出所有可能连接
SELECT * FROM tblname1 CROSS JOIN tblname2;
8.5.2 内连接形式
# 查询两个表中符合连接条件的记录
SELECT 字段名称,... FROM tblname1 
INNER JOIN tblname2
ON 连接条件;
# 例
SELECT e.id, e.username, e.age, d.depName 
FROM emp AS e 
INNER JOIN dep AS d
ON d.depID = d.id;
8.5.3 外连接形式
  • 左外连接
# 先显示左表中的全部记录,再去右表中查询复合条件记录,不符合以NULL代替
SELECT 字段名称,... FROM tblname1 
LEFT OUTER JOIN tblname2
ON 连接条件;
  • 右外连接
# 先显示右表中的全部记录,再去左表中查询复合条件记录,不符合以NULL代替
SELECT 字段名称,... FROM tblname1 
RIGHT OUTER JOIN tblname2
ON 连接条件;

8.6 外键约束

只有InnoDB支持外键,详情查看存储引擎相关资料。

8.6.1 创建外键
  • 建表时指定
# 先创建主表,子表的外键字段类型和主表要相似
# 如果外键字段没有创建索引,会自动创建
# 子表外键关联必须是父表的主键
[CONSTRAINT 外键名称] FOREIGN KEY (字段名称) 
REFERENCES 主表 (字段名称);
  • 动态添加删除外键
# 添加:要保证记录合法
ALTER TABLE tblname 
ADD FOREIGN KEY (外键字段)
REFERENCES 主表 (字段名称);
# 删除
ALTER TABLE tblname 
DROP FOREIGN KEY (外键字段);
8.6.2 外键约束
约束条件作用
CASCADE从父表删除或更新,子表相同操作
SET NULL从父表删除或更新,设置子表外键列为NULL
NO ACTION/RESTRICT拒绝对父表做更新或删除
# 使用方法,设置时指定
# 删除约束
ALTER TABLE tblname 
ADD FOREIGN KEY (外键字段)
ON DELETE CASCADE;
# 更新约束
ALTER TABLE tblname 
ADD FOREIGN KEY (外键字段)
ON UPDATE CASCADE;

8.7 特殊形式查询

8.7.1 子查询
SELECT 字段名称 FROM tblname
WHERE colname = (SELECT colname FROM tblname);
  • 由IN引发的子查询
# 也可以使用NOT IN
SELECT * FROM emp
WHERE depId IN (SELECT id FROM dep);
  • 由比较运算符引出子查询
SELECT id, username, score FROM stud
WHERE score >= (SELECT score FROM level WHERE id=1);
  • 由EXISTS引发的子查询
SELECT * FROM emp WHERE EXISTS (
SELECT depName FROM dep WHERE id = 10);
  • 带有ANY,SOME,ALL关键字的子查询
运算符ANYSOMEALL
">",">="最小值最小值最大值
"<", "<="最大值最大值最小值
"="任意值任意值
"<>", "!="任意值
SELECT * FROM stu
WHERE score >= ANY(
SELECT score FROM level);
  • 其他方式
# INSERT ... SELECT
# CREATE ... SELECT
CREATE TABLE user(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(20)
) SELECT id ,username FROM emp;
# 去掉字段重复值 DISTINCT
SELECT DISTINCT (username) FROM emp;
8.7.2 联合查询
# UNION 去掉重复值
SELECT 字段名称,... FROM tblname1
UNION
SELECT 字段名称,... FROM tblname2
# UNION ALL 简单合并
SELECT 字段名称,... FROM tblname1
UNION ALL
SELECT 字段名称,... FROM tblname2
8.7.3 自身连接查询

可实现无极限分类。

9. 常用函数

9.1 数学函数

函数作用函数作用
CEIL()进一取整ABS()绝对值
FLOOR()舍一取整POWER()a^b
ROUND()四舍五入PI()圆周率
TRUNCATE()截取RAND()随机数
MOD()取余SIGN()符号函数
EXP(a)e^a

9.2 字符串函数

函数作用函数作用
CHAR_LENGTH()得到字符串字符数LENGTH()得到字符串长度
CONCAT(str1,str2)合并字符串CONCAT_WS(separator, str1, str2)已注定分隔符拼接字符串
UPPER()/UCASE()转大写LOWER()/LCASE()转小写
REVERSE()字符串反转LEFT(str,n)返回前几个字符
RIGHT()返回后几个字符LPAD()/RPAD(str1,n,str2)用字符串左/右填充到指定长度
TRIM()/LTRIM()/RTRIM()去掉全部/左/右空格REPEAT(str,n)重复指定次数
REPLACE(str,str1,str2)替换字符串SUBSTRING(str,n1,n2)截取子串
STRCMP(str1,str2)比较字符串

9.3 日期时间函数

函数作用函数作用
CURDATE()/CURRENT_DATE()返回当前日期CURTIME()/CURRENT_TIME()当前时间
NOW()/CURRENT_TIMESTAMP()/SYSDATE()返回日期和时间MONTH()返回日期中月份
DAYNAME()返回星期几DAYOFWEEK()一周内第几天
WEEK()一年第几个星期YEAR()返回年份
HOUR()小时MINUTE()分钟
SECOND()秒数DATEDIFF()计算日期相差天数

9.4 其他函数

函数作用函数作用
VERSION()系统版本CONNECTION_ID()连接数
DATABASE()/SCHEMA()打开数据库USER()/CURRENT_USER()当前用户
SYSTEM_USER()/SESSION_USER()当前用户LAST_INSERT_ID()上一个自增长id
MD5()加密算法PASSWORD()默认用户加密算法

10. 导入导出数据

10.1 导出数据

10.1.1 SELECT ... INTO OUTFILE
SELECT * FROM runoob_tbl 
INTO OUTFILE '/tmp/tables.txt';
# 生成一个文件,各值用逗号隔开
SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
10.1.2 mysqldump导出

mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。

# 1.命令栏导出
$ mysqldump -u root -p --no-create-info \
            --tab=/tmp DB tbl
password ******
# 2.导出表到指定文件
$ mysqldump -u root -p DB tbl > dump.txt
password ******
# 3.导出整个数据库数据
$ mysqldump -u root -p DB > database_dump.txt
password ******
# 4.备份所有数据库
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

10.2 导入数据

10.2.1 LOAD DATA
# 1.导入dump.txt 
LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
# 2.明确指出列的分隔符和尾行标记
LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
FIELDS TERMINATED BY ':'
LINES TERMINATED BY '\r\n';
# 3.指定列的顺序
LOAD DATA LOCAL INFILE 'dump.txt' 
INTO TABLE mytbl (b, c, a);
10.2.2 mysqldump导入
# 1.导入dump.txt 
$ mysqlimport -u root -p --local database_name dump.txt
password *****
# 2.指定选项来设置指定格式
$ mysqlimport -u root -p --local --fields-terminated-by=":" \
   --lines-terminated-by="\r\n"  database_name dump.txt
password *****
# 3.使用 --columns 选项来设置列的顺序
$ mysqlimport -u root -p --local --columns=b,c,a \
    database_name dump.txt
password *****

11. 图形化工具

MySQL Workbench 下载: https://dev.mysql.com/downloads/workbench/

12. 快速参考

SQL 语句语法
AND / ORSELECT column_name(s) FROM table_name WHERE condition AND/OR condition
ALTER TABLEALTER TABLE table_name ADD column_name datatype
ALTER TABLE table_name DROP COLUMN column_name
AS (alias)SELECT column_name AS column_alias FROM table_name
SELECT column_name FROM table_name AS table_alias
BETWEENSELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE TABLECREATE TABLE table_name(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...)
CREATE INDEXCREATE INDEX index_name ON table_name (column_name)
CREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
DELETEDELETE FROM table_name WHERE some_column=some_value
DELETE FROM table_name
DELETE * FROM table_name
DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVINGSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
INSELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTOINSERT INTO table_nameVALUES (value1, value2, value3,....)
INSERT INTO table_name(column1, column2, column3,...)VALUES (value1, value2, value3,....)
INNER JOINSELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOINSELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOINSELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOINSELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKESELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
ORDER BYSELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC/DESC]
SELECTSELECT column_name(s) FROM table_name
SELECT *SELECT * FROM table_name
SELECT DISTINCTSELECT DISTINCT column_name(s) FROM table_name
SELECT INTOSELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_table_name
SELECT TOPSELECT TOP number/percent column_name(s) FROM table_name
TRUNCATE TABLETRUNCATE TABLE table_name
UNIONSELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
UNION ALLSELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
UPDATEUPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERESELECT column_name(s) FROM table_name WHERE column_name operator value

更新中...

转载于:https://www.cnblogs.com/apollospotatolikett/p/8955385.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值