MYSQL全语法速查(含示例)

文章目录

1.从简单的查询开始

查找所有记录(SELECT *)

login表

userNamepassword
admin123456
user123
SELECT * FROM login;

在这里插入图片描述

查找记录中的所有登录名(SELECT)

login表

userNamepassword
admin123456
user123
SELECT userName FROM login;

在这里插入图片描述

查找登录名为admin的密码(WHERE)

login表

userNamepassword
admin123456
user123
SELECT password FROM login WHERE userName = "admin";

在这里插入图片描述

查找电话号码非空的记录(IS NOT NULL)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
SELECT * FROM userinfo WHERE Phone IS NOT NULL;

在这里插入图片描述

查找所在城市为北京或者用户名字是李四的记录(OR)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
SELECT * FROM userinfo WHERE City = "北京" OR Name = "李四";

在这里插入图片描述

查找所在城市为北京并且用户名字是张三的记录(AND)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE City = "北京" AND Name = "张三";

在这里插入图片描述

查找用户名字是李四或者王五的记录(IN)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name IN ("李四", "王五");

在这里插入图片描述

查找注册时间在2022年到2023年之间的记录(BETWEEN)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE Time BETWEEN "2022-01-01 00:00:00" AND "2023-12-31 23:59:59";

在这里插入图片描述

查找姓张的用户记录(LIKE)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name LIKE "张%";

在这里插入图片描述

查找所有记录并根据积分排序(ORDER BY)

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo ORDER BY Point;

在这里插入图片描述

查找所有记录并根据积分降序排序(DESC)

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo ORDER BY Point DESC;

在这里插入图片描述

查找前两条记录(LIMIT)

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo LIMIT 2;

在这里插入图片描述

查找第两条记录(LIMIT a,b)

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo LIMIT 1,1;

在这里插入图片描述

2.表的连接

查找用户所在城市、积分、是否是VIP(JOIN)

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT
	Name, 
	City,
	Point,
	Vip 
FROM
	userinfo
	JOIN pointinfo ON userinfo.NAME = pointinfo.UserName;

在这里插入图片描述

查找ID对应的直接上级(如果有)的姓(自连接)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

查找ID(返回所有ID)对应的直接上级的姓(LEFT JOIN)

哪边要保留全表就往哪个方向连接
employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	LEFT JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

查找ID对应的工作时间(USING)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	employees.ID,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);

在这里插入图片描述

查找各员工的身份(UNION)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	ID,
	FirstName,
	LastName,
	"主管" AS Identity 
FROM
	employees 
WHERE
	Superior IS NULL 
	UNION
SELECT
	ID,
	FirstName,
	LastName,
	"普通员工" AS Identity 
FROM
	employees 
WHERE
	Superior IS NOT NULL;

在这里插入图片描述

3.增加、修改和删除

添加一个测试用户(INSERT INTO)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
INSERT INTO employees ( FirstName, LastName, Department, Salary )
VALUES
	( "赵", "一", "测试部门", 3000 );

在这里插入图片描述

获取上一个插入数据的ID(LAST_INSERT_ID)

在执行了上面的INSERT语句后使用,需要设置主键和自动递增
在这里插入图片描述

SELECT LAST_INSERT_ID();

在这里插入图片描述

创建employees的表复制(CREATE TABLE)

CREATE TABLE employees_backup AS 
SELECT * FROM employees;

在这里插入图片描述
在这里插入图片描述

更新表中ID为6的员工信息(UPDATE)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
6测试部门3000
UPDATE employees 
SET Department = "部门1",
	Superior = 3 
WHERE
	ID = 6;

在这里插入图片描述

删除员工ID为6的记录(DELETE)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
63部门13000
DELETE FROM employees WHERE ID = 6;

在这里插入图片描述

4.复杂查询

聚合函数(MAX MIN AVG SUM COUNT)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	MAX( Salary ),
	MIN( Salary ),
	AVG( Salary ),
	SUM( Salary ),
	COUNT( Salary ) 
FROM
	employees;

在这里插入图片描述

查找部门总工资(GROUP BY)

一般情况下GROUP BY的字段就是SELECT里面选择的非聚合函数的字段
employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department;

在这里插入图片描述

查找总工资大于20000的部门(HAVING)

HAVING就是GROUP BY后的WHERE(条件)
employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) AS total_salary 
FROM
	employees 
GROUP BY
	Department 
HAVING
	total_salary > 20000;

在这里插入图片描述

查找部门工资并且汇总(WITH ROLLUP)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department WITH ROLLUP;

在这里插入图片描述

查询工作时间为3年的员工薪水(IN)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	Salary 
FROM
	employees 
WHERE
	ID IN ( SELECT ID FROM worktimeinfo WHERE WorkTime = 3 );

在这里插入图片描述

查找比所有姓张的员工工资高的工资(ALL)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Salary 
FROM
	employees 
WHERE
	Salary > ALL ( SELECT Salary FROM employees WHERE FirstName LIKE "张%" );

在这里插入图片描述

查找各部门大于部门平均工资的员工ID(相关子查询)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	t1.ID 
FROM
	employees t1 
WHERE
	t1.Salary > ( 
		SELECT 
			AVG( Salary ) 
		FROM 
			employees t2 
		GROUP BY Department 
		HAVING t1.Department = t2.Department 
);

在这里插入图片描述

查询工作时间为3年的员工薪水(EXISTS)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	Salary 
FROM
	employees 
WHERE
	EXISTS ( SELECT ID FROM worktimeinfo WHERE worktimeinfo.ID = employees.ID AND WorkTime = 3 );

在这里插入图片描述

查询ID不为1的员工工资、姓、以及平均工资(SELECT和FROM中的子查询)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	FirstName,
	Salary,
	( SELECT AVG( Salary ) FROM employees ) AS Average 
FROM
	( SELECT FirstName, Salary FROM employees WHERE ID <> 1 ) AS select_table;

在这里插入图片描述

调整商品价格(ROUND TRUNCATE CEILING FLOOR ABS RAND)

productprice 表

IDNamePrice
1炒饭10.36
SELECT
	ID,
	NAME,
	Price,
	ROUND( Price ) AS "四舍五入",
	ROUND( Price, 1 ) AS "四舍五入保留一位小数",
	TRUNCATE ( Price, 1 ) AS "截断保留一位小数",
	CEILING( Price ) AS "大于该数的最小整数",
	FLOOR( Price ) AS "小于该数的最大整数",
	ABS( Price ) AS "绝对值",
	RAND( ) AS "0-1随机浮点数" 
FROM
	productprice 
WHERE
	ID = 1;

在这里插入图片描述

字符串处理(LENGTH UPPER LOWER LTRIM TRIM LEFT SUBSTRING LOCATE REPLACE CONCAT)

SELECT
	LENGTH( "test" ) AS "字符数",
	UPPER( "test" ) AS "大写",
	LOWER( "TEST" ) AS "小写",
	LTRIM( "     test   " ) AS "左边去掉空格",
	TRIM( "   test    " ) AS "去掉空格",
	LEFT ( "test", 2 ) AS "前2个字符",
	SUBSTRING( "test", 2, 2 ) AS "位置2长度2的子字符串",
	LOCATE( "st", "test" ) AS "匹配字符串的位置",
	REPLACE ( "test", "st", "xt" ) AS "字符串替换",
	CONCAT( "FirstName", " ", "LastName" ) AS "字符串拼接";

在这里插入图片描述

日期处理(NOW CURRENT_DATE CURRENT_TIME YEAR EXTRACT)

SELECT
	NOW( ) AS "当前日期时间",
	CURRENT_DATE ( ) AS "当前年份",
	CURRENT_TIME ( ) AS "当前时间",
	YEAR ( NOW( ) ) AS "获取年份",
	EXTRACT( MONTH FROM NOW( ) ) AS "从当前格式中提取月份";

在这里插入图片描述

日期计算(DATE_FORMAT DATE_ADD DATE_SUB DATEDIFF TIME_TO_SEC)

SELECT
	NOW( ) AS "当前时间",
	DATE_FORMAT( NOW( ), "%Y %m %d" ) AS "格式化日期",
	DATE_ADD( NOW( ), INTERVAL 1 HOUR ) AS "增加一小时",
	DATE_SUB( NOW( ), INTERVAL 1 HOUR ) AS "减少一小时",
	DATEDIFF( "2023-12-1", "2023-12-3" ) AS "日期间隔",
	TIME_TO_SEC( "22:25" ) - TIME_TO_SEC( "22:00" ) AS "时间间隔(s)";

在这里插入图片描述

查找各ID员工和上级,标出无上级的员工(IFNULL)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, IFNULL(Superior, "无上级") AS "上级ID" FROM employees;

在这里插入图片描述

查找各ID员工和上级,标出无上级的员工部门(COALESCE)

从前往后返回非空的查找值
employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, COALESCE(Superior, Department, "无上级") AS "上级ID或部门" FROM employees;

在这里插入图片描述

查找各ID员工工资水平(IF)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, IF(Salary >= 7000, "高工资", "普通工资") AS "工资级别", Salary FROM employees;

在这里插入图片描述

查找各ID员工工资水平(CASE)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	ID,
CASE
	WHEN Salary >= 8000 THEN "高工资" 
	WHEN Salary >= 5000 AND Salary < 8000 THEN "中工资" 
	WHEN Salary < 5000 THEN "普通工资" 
END 
	AS "工资级别",
	Salary 
FROM
	employees;

在这里插入图片描述

5.视图、存储过程、触发器和事务

创建视图(CREATE VIEW)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
CREATE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);

在这里插入图片描述

删除或更改视图(DELETE REPLACE)

CREATE OR REPLACE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);
DROP VIEW work_time_info;

对视图进行操作时不允许记录消失(WITH CHECK OPTION)

避免因为修改后记录不符合某一条件而被从视图中移除的情况,可以在创建视图时添加WITH CHECK OPTION

CREATE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID)
WITH CHECK OPTION;

创建并调用查询员工信息的存储过程(CREATE PROCEDURE、CALL)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

DELIMITER:修改分隔符(通常使用$$,可以改成其他的),目的是把CREATE到END的整个语句视为一体,最后把分隔符再改回分号

DELIMITER $$
CREATE PROCEDURE get_employee()
BEGIN
	SELECT * FROM employees;
END$$
DELIMITER ;

调用

CALL get_employee();

在这里插入图片描述

删除(如果存在)查询员工信息的存储过程(DROP PROCEDURE)

DROP PROCEDURE IF EXISTS get_employee;

查找指定部门的员工信息(带参存储过程)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE get_employee_from_Department(DepartmentName CHAR(3))
BEGIN
	SELECT * FROM employees WHERE Department = DepartmentName;
END$$
DELIMITER ;
CALL get_employee_from_Department("部门1");

在这里插入图片描述

查找指定部门的员工信息(存储过程默认参数)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE get_employee_from_Department(DepartmentName CHAR(3))
BEGIN
	IF DepartmentName IS NULL 
	THEN SET DepartmentName = "部门2";
	END IF;
	SELECT * FROM employees WHERE Department = DepartmentName;
END$$
DELIMITER ;

即使有默认参数,在调用的时候也需要传入空值,否则会报错.

CALL get_employee_from_Department(NULL);

更新ID为5的员工工作时间(存储过程参数验证)

worktimeinfo表

IDWorkTime
13
23
310
43
510

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE update_work_time(time INT)
BEGIN
	IF time <= 0 
	THEN SIGNAL SQLSTATE "22003"
	SET MESSAGE_TEXT = "错误的工作时间";
	END IF;
	UPDATE worktimeinfo SET WorkTime = time WHERE ID = 5;
END$$
DELIMITER ;

SQLSTATE各种数字代表的具体意义可自行搜索,在这里22003表示数值异常

CALL update_work_time(-2);

在这里插入图片描述

查找指定ID的员工工资(存储过程输出参数)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

参数中的OUT表示这是输出参数,需要传入变量

DELIMITER $$
CREATE PROCEDURE get_salary_from_employee(ID INT, OUT find_salary INT)
BEGIN
	SELECT Salary INTO find_salary FROM employees t1 WHERE t1.ID = ID;
END$$
DELIMITER ;

注意此处变量find_salary 需要加前缀@

SET @find_salary = 0;
CALL get_salary_from_employee(3, @find_salary);
SELECT @find_salary AS "工资";

在这里插入图片描述

将员工工资换算为美元(函数 FUNCTION)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

READS SQL DATA表示函数选项:函数体中包含SELECT查询语句,但不包含更新语句
DECLARE:在函数中定义一个变量.DEFAULT是默认值

CREATE FUNCTION dollar_salary(ID INT)
RETURNS DECIMAL(10, 2)
READS SQL DATA
BEGIN
	DECLARE dollar DECIMAL(10, 2) DEFAULT 0;
	DECLARE iSalary INT;
	
	SELECT Salary INTO iSalary FROM employees t1 WHERE t1.ID = ID;
	SET dollar = iSalary / 7;
	
	RETURN dollar;
END

创建完函数就可以当成函数来用了

SELECT ID, Salary, dollar_salary(ID) AS "美元工资" FROM employees;

在这里插入图片描述

计算公司所发月工资(触发器TRIGGER)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

salaryinfo表

TotalSalary
37500

NEW指更新后行的数据,OLD指更新前行的数据,可以用来取其中的字段

DELIMITER $$
CREATE TRIGGER totalSalary_after_update
	AFTER UPDATE ON employees
	FOR EACH ROW
BEGIN
	UPDATE salaryinfo SET TotalSalary = TotalSalary + NEW.Salary - OLD.Salary;
END$$
DELIMITER ;
UPDATE employees SET Salary = 8000 WHERE ID = 1;

在这里插入图片描述
我们再把数据改回来

UPDATE employees SET Salary = 5000 WHERE ID = 1;

在这里插入图片描述
创建好的触发器是无法直接看到的,我们可以使用命令查看,大概是这样

SHOW TRIGGERS;

在这里插入图片描述
查找特定名称的触发器,information_schema是触发器所在的数据库的数据表triggers ,触发器都存储在里面,触发器使用特定命名方式可以方便地查找表或者操作对应的触发器

SELECT * FROM information_schema.triggers WHERE trigger_name LIKE "totalSalary%";

删除计算月工资的触发器(DROP TRIGGER)

DROP TRIGGER IF EXISTS totalSalary_after_update;

创建员工工龄记录事件(事件EVENT)

查看事件管理器是否打开,只有打开才能相应事件

SHOW VARIABLES LIKE "event%";

这里自动关闭了,把它打开

SET GLOBAL event_scheduler = ON;

在这里插入图片描述

worktimeinfo表

IDWorkTime
13
23
310
43
510

EVERY指多次执行,单次执行用AT

DELIMITER $$
CREATE EVENT yearly_update_worktimeinfo
ON SCHEDULE
	EVERY 1 YEAR STARTS "2023-01-01"
DO BEGIN
	UPDATE worktimeinfo SET WorkTIme = WorkTIme + 1;
END$$
DELIMITER ;

查看、删除和更改事件

SHOW EVENTS;
#或者筛选特定名字的事件
SHOW EVENTS LIKE "yearly%";

在这里插入图片描述
删除事件

DROP EVENT IF EXISTS yearly_update_worktimeinfo;

更改事件,使用ALTER代替CREATE即可

DELIMITER $$
ALTER EVENT yearly_update_worktimeinfo
ON SCHEDULE
	EVERY 1 YEAR STARTS "2023-01-01"
DO BEGIN
	UPDATE worktimeinfo SET WorkTIme = WorkTIme - 1;
END$$
DELIMITER ;

禁用或启用事件

ALTER EVENT yearly_update_worktimeinfo DISABLE;

在这里插入图片描述

ALTER EVENT yearly_update_worktimeinfo ENABLE;

在这里插入图片描述

加入新员工后更新月总工资(事务TRANSACTION)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

salaryinfo表

TotalSalary
37500

注意表结构,此时插入数据失败,salaryinfo表也不会更新

START TRANSACTION;
UPDATE salaryinfo SET TotalSalary = TotalSalary + 8000;
INSERT INTO employees (ID, FirstName, LastName, Salary) VALUES(2, "赵", "四", 8000);
COMMIT;

在这里插入图片描述
在这里插入图片描述

仍然是37500
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值