MySQL基本操作

day01_数据库基础

课前回顾:
  1.Junit单元测试,可以单独执行一个方法去测试
  2.@Test @Before @After
  3.类加载器:负责将class文件加载到内存
    BootStrapClassLoader:核心类
    ExtClassLoader:扩展类
    AppClassLoader:自定义类和第三方jar包
  4.类加载器机制:双亲委派  缓存机制
    一个类只加载一次
  5.类的加载时机:
    a.new对象 b.new子类 c.执行main方法  d.调用静态成员  e.反射
  6.反射:
    a.Class对象:jvm自动为加载到内存的class文件在堆中创建的对象
    b.class:描述Class对象的类就叫做Class7.使用:
    a.getConstructors:获取所有public的构造
    b.getConstructor(参数类型的class对象):获取指定的public的构造
    c.newinstance:创建对象
    d.getDeclaredConstructors:获取所有的构造包括private
    e.getDeclaredConstructor(参数类型的class对象):获取指定的构造
    f.setAccessible(true):解除私有权限
    g.getMethods():获取所有public的方法
    h.getMethod(方法名,参数class对象):获取指定的成员方法
  8.注意:
    将来开发,将配置文件放到resources目录下
    用类加载器读取:  当前类.class.getClassLoader().getReourceAsStream("文件名")
  9.注解:
    a.定义:
      public @interface 注解名{
          数据类型 属性名(),
          数据类型 属性名() default;
      }
    b.使用:
      @注解名(属性名 = "属性值"....)
    c.注解解析:
      isAnnotationPresent(注解的class对象)-> 判断指定位置上是否有指定的注解
      getAnnotation(注解的class对象):获取指定的注解
  10.元注解:管理注解的注解
      @Target:控制自定义注解能放到什么位置上
      @Retention:控制自定义注解的生命周期
 
 今日重点:
  1.会安装mysql服务端和客户端
  2.会使用sql语句创建数据库,删除数据库
  3.会使用sql语句创建表,删除表
  4.会使用sql语句对表中的数据进行增,,,5.会在创建表的时候加约束

第一章.数据库介绍

1.数据库介绍

1.什么是数据库
  存储数据的仓库
2.作用:
  永久存数据->会将数据按照指定的格式存储,方便我们程序员直接对指定的数据进行增删改查

2.数据库管理系统

指的是一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性,用户通过数据库管理系统访问数据库的数据

3.数据库表

1.数据库中要创建很多张表,而表才是我们真正存储数据的地方
2.表的组成部分:
  a.表名
  b.字段名->每列的字段叫啥
  c.每一个字段都有对应的数据类型
3.表和java中的javabean对应
  表名->类名
  字段->属性
  表中的每一行数据->对象

4.数据库表和Java类的对应关系

第二章.mysql8安装

1.MySQL数据库安装

2.数据库服务启动和停止

MySQL软件的服务器端必须先启动,客户端才可以连接和使用使用数据库。

2.1.方式1:图形化方式

* 计算机(点击鼠标右键)==》管理(点击)==》服务和应用程序(点击)==》服务(点击)==MySQL57(点击鼠标右键)==》启动或停止(点击)
* 控制面板(点击)==》系统和安全(点击)==》管理工具(点击)==》服务(点击)==MySQL57(点击鼠标右键)==》启动或停止(点击)
* 任务栏(点击鼠标右键)==》启动任务管理器(点击)==》服务(点击)==MySQL57(点击鼠标右键)==》启动或停止(点击)

2.2.方式2:命令方式

启动 MySQL 服务命令:
net start MySQL80

停止 MySQL 服务命令:
net stop MySQL80

3.配置数据库环境变量

3.1.方式1:使用MYSQL_HOME

环境变量名操作环境变量值
MYSQL_HOME新建D:\ProgramFiles\mysql\MySQLServer5.7
path编辑%MYSQL_HOME%\bin

3.2.方式2:直接配置mysql的bin路径

环境变量名操作环境变量值
path编辑D:\ProgramFiles\mysql\MySQLServer5.7\bin

4.数据库服务端安装之后登陆

1.win+R-->调出黑窗口
2.登录命令:
  a.mysql -u用户名 -p密码->回车   -> 缺点,在登录的时候密码显示出来了
  b.mysql -u 用户名 -p   ->回车
    输入密码(密码将显示成小星星)
问题:输入mysql命令出现"不是内部或外部命令"
原因:环境变量没配置
解决:将mysql安装路径下的bin目录复制到环境变量下的path中
    如果path下有,还出现了"不是内部或者外部命令",干掉重新配置一下

问题:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
原因:输入的mysql用户名或者密码有问题

问题:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
原因:mysql服务没有启动

5.黑窗口乱码问题(可以忽略)

1.在黑窗口中默认编码为GBK,而我们mysql为UTF-8,所以在黑窗口中操作中文就会乱码
2.解决:
  a.在黑窗口中输入:set names gbk   ->临时将mysql编码修改成gbk
  b.在mysql安装路径下修改my.ini文件,将涉及到编码的地方都修改了,重启服务所有地方生效。
在路径:D:\ProgramFiles\mysql\MySQLServer8\Data 找到my.ini文件

修改内容1:
	找到[mysql]命令,大概在63行左右,在其下一行添加 
		default-character-set=utf8
修改内容2:
	找到[mysqld]命令,大概在76行左右,在其下一行添加
		character-set-server=utf8
		collation-server=utf8_general_ci

修改完毕后,重启MySQL57服务
show variables like 'character_%';
show variables like 'collation_%';

在这里插入图片描述

6.mysql客户端(可视化工具)安装

例如:Navicat PreminumSQLyog 等工具

6.1.SQLyog

通过黑窗口先登录数据库
处理无法连接:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

6.2.Navicat

第三章.sql语句

1.sql语言介绍

1.概述:是一种数据库认识的语言,是所有关系型数据库的一个标准
2.注意:关系型数据库都要遵循这个sql语句规范,但是每一款关系型数据库都要自己的特点
       这种具有自己特有的sql语法,叫做数据库方言

2.sql语言分类

- 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 

- 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行操作。关键字:insert,delete,update等

- 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

- 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

3.sql语句的通用语法

1.- SQL语句可以单行或多行书写,以分号结尾
2.- 可使用空格和缩进来增强语句的可读性:基本上一个单词就一个空格
3.- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  - 例如:SELECT * FROM user4.- 同样可以使用/**/的方式完成注释  #
    /*
     我是一个注释
    */
    #我也是一个注释
   -- 我也是一个注释

4.sql中的数据类型

类型名称说明
int(整数长度)整数类型
double小数类型
decimal(m,d)指定整数位与小数位长度的小数类型
date日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒 2020-01-01
datetime日期类型,格式为 YYYY-MM-DD HH:MM:SS,包含年月日时分秒 到9999年
timestamp日期类型,时间戳 从1970年到2038年
varchar(字符串长度)文本类型, M为0~65535之间的整数
我们先学  mysql

第四章.mysql中语句

1.DDL之数据库操作:database

1.1 创建数据库

1.关键字:create database
2.语法:
  create database 数据库名 charset utf8;

注意:

1.mysql默认编码,拉丁文,latin-1,所以创建库的时候,指定一下UTF8

2.如果创建数据库的时候忘记加utf8了,可以后改

3.在写sql语句的时候,如果库名,表名,列名和sql语句的关键字冲突了,可以用``包裹

1.2 查看数据库(了解)

#查看所有数据库
show databases;

#查看指定数据库的定义信息
show create database 数据库名

#查看所有数据库
SHOW DATABASES;

#查看指定数据库的定义信息
SHOW CREATE DATABASE 220227_java1;

1.3 删除数据库

1.关键字:drop
2.语法:
  drop database 数据库名字
DROP DATABASE 220227_java1;

1.4 使用数据库(切换数据库)

use 数据库名;
USE 220227_java1;

1.5 鼠标点击:创建数据库_删除数据库

在这里插入图片描述

2.DDL之表操作->table

2.1 创建表

1.关键字:create table
2.语法:
  create table 表名(
    列名 数据类型(长度) [约束],
    列名 数据类型(长度) [约束],
    列名 数据类型(长度) [约束]
  );
 
4.注意:
  a.如果定义完一个列之后,后面还有其他的列,需要加,
  b.如果定义最后一个列了,就不用加,
  c.一张表应该有一个主键(约束),  primary key
    当一列设置成主键了,此列中的数据唯一,不能重复
    一个主键可以代表一条数据(好比是身份证)
CREATE TABLE category(
   cid INT PRIMARY KEY,
   cname VARCHAR(10)
);

2.3 查看表(了解)

#查看所有表
show tables;

#查看表结构
desc 表名;
#查看所有表
SHOW TABLES;

#查看表结构
DESC category;

2.4 删除表

1.关键字:drop table
2.语法:
  drop table 表名
DROP TABLE category;

2.5修改表结构(了解)

alter table 表名 add 列名 类型(长度) [约束];
作用:添加列. 
ALTER TABLE category ADD `desc` VARCHAR(100);
alter table 表名 modify 列名 类型(长度) [约束];
  作用:修改列的类型,长度及约束.
ALTER TABLE category MODIFY `desc` VARCHAR(10); 
  alter table 表名 change 旧列名 新列名 类型(长度) [约束]; 
  作用:修改表_修改列名.
ALTER TABLE category CHANGE `desc` `miaoshu` VARCHAR(10);
  alter table 表名 drop 列名; 
  作用:修改表_删除列.
ALTER TABLE category DROP `miaoshu`;
 rename table 表名 to 新表名; 
 作用:修改表名
RENAME TABLE category TO kind;

RENAME TABLE kind TO category;

3.DML之数据操作语言

3.1 插入数据

1.关键字:insert into values
2.语法:
  insert into 表名(列名,列名) values (具体的值,具体的值)
/*
    insert into 表名(列名,列名) values (具体的值,具体的值)
*/
INSERT INTO category (cid,cname) VALUES (1,"蔬菜");

/*
   1.如果操作表中的数据,对应的类为varchar类型,那么操作数据时,不建议用双引号,推荐使用单引号''
   2.原因:
     将来我们肯定不是在mysql中直接写sql语句,我们写的sql应该放到java中
     然后调用java中的api去执行我们写的sql语句,从而操作mysql中的数据
     
   3.所以:如果将sql语句放到java语句中怎么写:写到String中
     INSERT INTO category (cid,cname) VALUES (1,"蔬菜");
     
     String sql = "INSERT INTO category (cid,cname) VALUES (1,"蔬菜");";
     
     以上代码这样写不行
     
   4.应该怎么写?  将sql中的""改成''
     INSERT INTO category (cid,cname) VALUES (1,'蔬菜');
     
     String sql = "INSERT INTO category (cid,cname) VALUES (1,'蔬菜');"
   
*/

INSERT INTO category(cid,cname) VALUES (2,'水果');


/*
 其他insert方式:不用直接指定列名,直接写要存的数据
                 要求存储的数据要对应所有的列
 
*/

INSERT INTO category VALUES (3,'玩具');


/*
  批量添加
  
  insert into 表名(列名,列名) values (具体值,具体值),(具体值,具体值),(具体值,具体值),(具体值,具体值)
*/
INSERT INTO category VALUES (4,'服装'),(5,'箱包'),(6,'电脑');

3.2 删除数据

1.关键字:delete from
2.语法:
  delete from 表名-> 一次全删除
  delete from 表名 where 条件-> 按照条件删除
  
3.条件:java一样

  java         mysql
   >           >
   <           <
   >=          >=
   <=          <=
   ==          =
   !=          !=  或者 <>

/*
  delete from 表名-> 一次全删除
*/
DELETE FROM category;

-- 删除cid为1的记录
DELETE FROM category WHERE cid = 1;

-- 删除cid>=5的记录
DELETE FROM category WHERE cid >= 5;

-- 删除cid不等于3的记录
DELETE FROM category WHERE cid != 3;

DELETE FROM category WHERE cid <> 3;

DELETE FROM category WHERE NOT(cid = 3);

3.3 修改数据

1.关键字:update set
2.语法:
  update 表名 set 列名 = 值 -> 是将指定的列所有的数据全部修改
  update 表名 set 列名 = 值 where 条件 -> 根据条件修改数据

-- 修改数据
UPDATE category SET cname = '化妆品';

-- 将表中的蔬菜改成家具
UPDATE category SET cname = '家具' WHERE cname = '蔬菜';

-- 将cid为6的数据改成手机
UPDATE category SET cname = '手机' WHERE cid = 6;

-- 将cid不等于1的canme都改成平板
UPDATE category SET cname = '平板' WHERE cid<>1;

第五章.约束

1.主键约束

1.主键约束:primary key
2.主键列中的数据有什么特点:
  a.数据唯一,不能重复
  b.不能为NULL
  c.一个主键相当于一个人的身份证,代表一整条数据
3.注意:
  每张表中都应该有一个主键列,代表一条数据

1.1.添加方式1:在创建表时,在字段后面直接指定(重点)

/*
  在创建表的时候直接指定主键约束
*/
CREATE TABLE category(
  cid INT PRIMARY KEY,
  cname VARCHAR(10)
);


1.2.添加方式2:在constraint约束区域,去指定主键约束

1.什么是constraint约束区域:
  最后一列后面和右半个小括号前面的区域
2.格式:
  [constraint 名字] primary key (字段名)
  
3.注意:[constraint 名字]:可写可不写

-- [constraint 名字] primary key (字段名)

CREATE TABLE category(
  cid INT,
  cname VARCHAR(10),
  PRIMARY KEY (cid)
);

1.3.添加方式3:通过修改表结构的方式

1.格式:ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
2.注意:[CONSTRAINT 名称]可以省略不写

/*
  1.格式:ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
  2.注意:[CONSTRAINT 名称]可以省略不写

*/

CREATE TABLE category(
  cid INT,
  cname VARCHAR(10)
);

ALTER TABLE category ADD PRIMARY KEY (cid);

INSERT INTO category (cid,cname) VALUES (1,'蔬菜');

INSERT INTO category (cid,cname) VALUES (1,'水果');-- 错误,和上面的主键数据重复

INSERT INTO category (cid,cname) VALUES (NULL,'箱包');-- 错误,主键列中的数据不能是NULL

1.4.联合主键

1.什么是联合主键:
  多个列结合称之为是一个主键
2.特点:
  数据不能完全一样,不能为NULL

CREATE TABLE person(
  firstname VARCHAR(10), -- 姓
  lastname VARCHAR(10), -- 名
  address VARCHAR(10),-- 地址
  city VARCHAR(10), -- 城市
  
  PRIMARY KEY (firstname,lastname)
);

1.5.删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY->删除主键约束

#ALTER TABLE persons DROP PRIMARY KEY->删除主键约束
alter table persons drop primary key;

2.自增长约束

2.1.基本操作

1.关键字:
  auto_increment
2.使用:一般和primary key 一起使用
3.注意:
  a.主键能代表一条数据
  b.自增长列,只能自动维护此列中的数据,可以自动编号,但是不能代表一条数据

CREATE TABLE category(
  cid INT PRIMARY KEY AUTO_INCREMENT,
  cname VARCHAR(10)
);

CREATE TABLE category(
  cid INT PRIMARY KEY AUTO_INCREMENT,
  cname VARCHAR(10)
);

-- 给自增长的列添加数据
INSERT INTO category (cname) VALUES ('手机');

-- 主键自动维护了,所以我们添加数据时,不用特意指定主键列了

INSERT INTO category (cname) VALUES ('服装'),('电脑');

-- 删除cid为6的数据

DELETE FROM category WHERE cid = 6;


-- 再次添加-> 会从被删除的那个编号开始,继续往后编号
INSERT INTO category (cname) VALUES ('鼠标');

truncate table 表名-> 清空表数据,摧毁表结构
TRUNCATE TABLE category;

/*
自增长是一个约束,操作起来和其他约束不太一样

如果自增长约束和主键约束合起来使用想删除

先删除自增长约束
再删除主键约束

*/

drop table category;
create table category(
cid int primary key auto_increment,
cname varchar(100)
);

alter table category modify cid int;

alter table category drop primary key;


2.2.truncate和delete区别

在自增长的前提下:
  a.delete之后,重新添加数据,自增长列不会重新编号
  b.truncate之后,属于DDL,摧毁表结构,删除表记录,重新添加数据,自增长列会重新编号

3.非空约束

1.关键字:  NOT NULL
2.特点:
  此列的数据不能为NULL

CREATE TABLE product(
  pid INT PRIMARY KEY AUTO_INCREMENT,
  pname VARCHAR(10) NOT NULL
);

INSERT INTO product (pname) VALUES ('Iphone13');


/*
   String s1 = null -> 代表s1为null,null代表数据不存在
   String s2 = "null" -> s2是有数据的,字符串内容为null
   String s3 = ""  -> s3确确实实是一个字符串,只不过双引号中没内容
*/

INSERT INTO product (pname) VALUES (NULL); -- 不行,pname约束为非空约束,不能是NULL 好比是String s1 = null

INSERT INTO product (pname) VALUES ('null');-- String s2 = "null"  可以添加

INSERT INTO product (pname) VALUES ('');-- String s3 = ""  可以添加


4.唯一约束

1.关键字:UNIQUE
2.特点:
  UNIQUE修饰的列中的数据不能重复

CREATE TABLE product(
  pid INT PRIMARY KEY AUTO_INCREMENT,
  pname VARCHAR(20)UNIQUE
);

TRUNCATE TABLE product;

INSERT INTO product (pname) VALUES ('苹果13');
INSERT INTO product (pname) VALUES ('华为');
INSERT INTO product (pname) VALUES ('苹果13');-- 错误,因为pname列有唯一约束,数据不能一样

唯一约束和主键约束有区别:
1.相同点:
  数据都应该是唯一的
2.不同点:
  a.主键约束:一个表中只有一个主键
  b.唯一约束:一个表中可以有多个列为唯一约束

删除唯一约束:
 ALTER TABLE persons DROP INDEX 名称   [名称是CONSTRAINT后面的名称]

第六章.简单查询

1.数据准备

#创建商品表:
create table product(
	pid int primary key,
	pname varchar(20),
	price double
);
INSERT INTO product(pid,pname,price) VALUES(1,'联想',5000);
INSERT INTO product(pid,pname,price) VALUES(2,'海尔',3000);
INSERT INTO product(pid,pname,price) VALUES(3,'雷神',5000);
INSERT INTO product(pid,pname,price) VALUES(4,'JACK JONES',800);
INSERT INTO product(pid,pname,price) VALUES(5,'真维斯',200);
INSERT INTO product(pid,pname,price) VALUES(6,'花花公子',440);
INSERT INTO product(pid,pname,price) VALUES(7,'劲霸',2000);
INSERT INTO product(pid,pname,price) VALUES(8,'香奈儿',800);
INSERT INTO product(pid,pname,price) VALUES(9,'相宜本草',200);
INSERT INTO product(pid,pname,price) VALUES(10,'面霸',5);
INSERT INTO product(pid,pname,price) VALUES(11,'好想你枣',56);
INSERT INTO product(pid,pname,price) VALUES(12,'香飘飘奶茶',1);
INSERT INTO product(pid,pname,price) VALUES(13,'果9',1);

2.简单查询

1.关键字:select from where
2.语法:
  select 列名,列名 from 表名 [where条件]
  
  select * from 表名-> 查询表中所有列的数据  * 代表的是查询结果展示所有的列
  select 列名 from 表名-> 查询指定这一列的数据   最终查询结果只展示指定的一列
  select 列名 from 表名 where 条件-> 按照指定的条件查询数据
  
3.注意:
  a.select后面写多少列,查询结果就展示多少列的数据
    写哪些列,查询结果就展示哪些列的数据
  b.查询出来的结果是一张伪表,这个表的数据是只读的,不能动

-- 查询 product 表中所有的数据
SELECT * FROM product;

-- 查询商品名和商品价格
SELECT pname,price FROM product;

/*
  查询的过程中,可以给表起别名
  
  as 别名
  
  注意: as可以省略
  
  给表起别名,不是用来看的,而是后面用来调用字段的
*/

SELECT * FROM product p;

/*
  给列起别名
  
  原列名 as 别名 -> as可以省略
*/

SELECT pname '商品名', price '价格' FROM product;

/*
  去重复值
  
  关键字: distinct(列名)
*/

SELECT DISTINCT(price) FROM product;

/*

  查询之后,可以给指定的列做计算
  
  将所有商品的价格+10后展示
*/

SELECT pname,price+10 'newPrice' FROM product;

3.条件查询

比较运算符< <= >= = <>大于、小于、大于(小于)等于、不等于
BETWEEN …AND…显示在某一区间的值(含头含尾)
字段 IN(set)显示在in列表中的值,例:in(100,200) 查询id为1,3,7的商品: id in(1,3,7)
LIKE ‘张pattern’模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%';
比如:查询姓张的人:name like ‘张%’
查询商品名中带香的商品: pname like ‘%香%’
查询第二个字为想的商品: like ‘想%'
查询商品名为四个字的商品:like '
___’
IS NULL判断是否为空
逻辑运行符and (与)多个条件同时成立 全为true,整体才为true
or(或)多个条件任一成立 有真则真
not(非)不成立,例:where not(salary>100);
-- 查询商品名为'花花公子'的商品所有信息
SELECT * FROM product WHERE pname = '花花公子';

-- 查询价格为800的商品
SELECT pname,price FROM product WHERE price = 800;

-- 查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price>60;

-- 查询商品价格在200-1000之间的所有商品信息
SELECT * FROM product WHERE price>=200 AND price<=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
SELECT * FROM product WHERE price BETWEEN 1000 AND 200; -- 不行,小的放前面,大的放后面

-- 查询商品价格是200或者800的商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);

-- 查询以'香'开头的商品
SELECT pname,price FROM product WHERE pname LIKE '香%';

-- 查询含有'霸'的商品
SELECT pname,price FROM product WHERE pname LIKE '%霸%';

-- 查询商品名为NULL的
SELECT * FROM product WHERE pname IS NULL;

-- 查询商品名不为NULL的
SELECT * FROM product WHERE pname IS NOT NULL;

4.排序查询

1.关键字:order by  desc|asc
2.语法:
  select 列名 from 表名 order by 排序字段 asc|desc-> 查询之后要指明对哪一列进行排序
  
  asc:升序(默认)
  desc:降序
      
3.问题:先查询还是先排序
      先查询,后排序
      而且中间不管加啥语法,都是最后排序

书写sql语句关键字的顺序
select 
from 
where 
group by 
having 
order by

执行顺序:
from 
where 
group by 
having 
select 
order by

先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询
查询得出一个结果,在针对这个结果进行一个排序

-- 使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC;

-- 使用价格排序(升序)
SELECT * FROM product ORDER BY price ASC;
SELECT * FROM product ORDER BY price;

-- 显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT(price) FROM product ORDER BY price DESC;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值