ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文知数据库 [打印本页]

作者: 张裕    时间: 2024-8-13 10:24
标题: 一文知数据库
一文知数据库

1.数据库的概念

1.1概述


​ 数据库就是存储数据的堆栈,其本质是一个文件体系,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,
修改,删除及查询操作。

​ 数据库管理体系(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行同一管理和控制,以包管数据库的安全性和完整性。用户通过数据库管理体系访问数据库中表内的数据。


1.2 数据库表

数据库中以表为构造单元存储数据。
表类似我们的Java类,每个字段都有对应的数据范例

1.3常见数据库


当然我们最常用的数据库是:mysql、oracle

2.SQL分类

关系型数据库(RDBMS),关系型数据库绝对是 DBMS 的主流,其中使用最多的 RDBMS 分别是 Oracle、MySQL 和 SQL Server ,这些都是关系型数据库(RDBMS)。



图形数据库,也只有 NoSQL 一词才可以将这些技术席卷进去。
2.1SQL先容

数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理体系都需要遵照的规范。差别的数据库生产厂商都支持SQL语句,但都有特有内容
2.2SQL语句分类

SQL分类:数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:INSERT,DELETE,UPDATE等
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。主要的语句关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT 等。
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,WHERE等。
事件控制语言:简称 TCL(Transaction Control Language),COMMIT提交事件、ROLLBACK 回滚事件。
SQL通用语法:

比方:

#:单行解释

标点符号:

命名规则:

# 表名错误,因为表名有空格
create table student info(…);
# 起别名时,as 都可以省略,如果字段别名中没有空格,那么可以省
略""
  1. select id as "编号", `name` as "姓名" from t_stu;
  2. \# 错误,如果字段别名中有空格,那么不能省略""
  3. select id as 编 号, `name` as 姓 名 from t_stu;
复制代码
2.3关系型数据库计划规则

2.3.1 概述


2.3.2 表、记录、字段



3.SQL语句中的数据范例

MySQL中的我们常使用的数据范比方下

整数范例 字节 范围(有符号) 范围(无符号) 用途


日期和时间范例


字符串范例


4.DDL-数据库操作

4.1创建数据库

格式:
  1. create database 数据库名;
  2. create database 数据库名 character SET 字符集; # 可以
  3. 设置数据库的字符编码
复制代码
比方:
创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8

  1. CREATE DATABASE java1;
复制代码
创建数据库 数据库中数据的编码采用的是安装数据库时指定编码 gbk

  1. CREATE DATABASE myDatabase character SET gbk;
复制代码
4.2查看数据库

查看数据库MySQL服务器中的所有的数据库:

  1. SHOW DATABASES;
复制代码
查看某个数据库的定义的信息:

  1. SHOW CREATE DATABASE 数据库名;
复制代码
比方:
  1. SHOW CREATE DATABASE  java1;
复制代码
4.3 删除数据库

格式
  1. DROP DATABASE 数据库名称;
复制代码
比方:
  1. DROP DATABASE java1;
复制代码
4.4使用数据库

查看正在使用的数据库:

  1. select database();
复制代码
切换数据库

  1. use 数据库名;
复制代码
练习题:

  1. ###数据库操作# 创建数据库 (默认字符集: UTF-8 , 此编码为安装时设置)CREATE DATABASE java2;#显示所有数据库SHOW DATABASES;
  2. #显示数据库的创建信息SHOW DATABASE JAVA2;#删除数据库DROP DATABASE JAVA2;
复制代码
5.DDL–表结构操作 (重点※)

5.1 创建表

格式:
  1. create table 表名(
  2.    字段名 类型(长度) [约束],
  3.    字段名 类型(长度) [约束],
  4.    ...
  5. );
  6. 类型:
  7. varchar(n) 字符串
  8. int 整形
  9. double 浮点
  10. date 日期
  11. timestamp 时间戳
  12. datetime 日期时间
  13. 约束:
  14. Primary key 主键,被主键修饰字段中的数据,不能重复、不能为
  15. null。
  16.   Not null 非空约束
  17. Unique 唯一约束
  18. Default 默认约束
复制代码
5.2查看表

查看数据库中的所有表

格式:
  1. SHOW tables;
复制代码
查看创建表语句

格式
  1. SHOW CREATE tables 表名;
复制代码
查看表结构

格式
  1. DESC 表名;
复制代码
5.3删除表

格式
  1. drop table 表名;
复制代码
5.4 修改表结构

5.4.1 增加字段

  1. alter table 表名 add 字段名 类型(长度) [约束];
复制代码
作用:新增表添加列
比方:
#1,为学生表添加一个新的字段为 班级名称 varchar(50)

  1. ALTER TABLE t_student ADD classname varchar(50) ;
复制代码
5.4.2 修改字段信息

  1. alter table 表名 modify 列名 类型(长度) [约束];
复制代码
作用:修改表修改列的范例长度及束缚
比方:
#2, 将学生表的班级名称修改成int范例

  1. ALTER TABLE t_student modify classname int;
复制代码
5.4.3 修改字段名

  1. alter table 表名 change 旧列名 新列名 类型(长度) [约束];
复制代码
作用:修改表修改列名
比方:
#3,将学生表的班级名称字段更换为 classname2 int

  1. ALTER TABLE t_student change classname classname2 int ;
复制代码
5.4.4 删除字段

  1. alter table 表名 drop 列名;
复制代码
作用:修改表删除列.
比方:
#4, 删除学生表中classname2这列

  1. ALTER TABLE t_student drop  classname2;
复制代码
5.4.5 修改表字符集

  1. alter table 表名 character SET 字符集;
复制代码
作用:修改表的字符集
比方:
#6, 将学生表 t_students 的编码表进行修改,修改成 gbk
  1. ALTER TABLE t_student character set gbk;
复制代码
5.5 修改表名

rename table 旧表名 to 新表名;
作用:修改表名
比方:把t_student表名改成student
  1. rename table t_student to student;
复制代码
练习题:

  1. #######表 table
  2. # 创建表--t_user
  3. ## 有主键 字段id,username,password,phone,remark
  4. create table t_user(
  5.         id int primary key,
  6.     username char(30) ,
  7.     password char(30) ,
  8.     phone int ,
  9.     remark char(20)
  10. );
  11. ## 创建表之后,可以查询创建表语句 (数据在可视化视图中显示不
  12. 全)
  13. show create tables t_user;
  14. ##查看表结构
  15. desc t_user;
  16. #删除表
  17. drop table t_user;
  18. #修改表结构 -- 如果SQL语句中使用到关键字,建议使用重音符括住
  19. ##添加字段 -- address
  20. alter table t_user add address int;
  21. ##修改字段类型
  22. alter table t_user modify address char(255);
  23. ##修改整个字段
  24. alter table t_user change address address2  char(10);
  25. ##删除字段
  26. alter table t_user drop address2;
  27. ##修改表名 -- 修改成user  
  28. rename table t_user to tuser;
  29. ##修改字符集 -- 修改成gbk
  30. alter table tuser  character  set gbk;
复制代码
6. DML–数据操作语言(⭐⭐)

6.1 插入表记录INSERT

语法
  1. -- 向表中插入某些字段
  2. INSERT INTO 表名 (字段1,字段2,字段3) VALUES (值1,值2,值
  3. 3);
  4. --向表中插入所有字段,字段的顺序为创建表时的顺序
  5. INSERT INTO 表 VALUES (值1,值2,值3..); # 简写
复制代码
注意:

  1. create table student(
  2. sid int(20) primary key,
  3. sname varchar(60) not null,
  4. email varchar(60),
  5. isdel varchar(10) default '1'
  6. );
  7. insert into
  8. student(sid,sname,email,isdel)values(1001,'张
  9. 三','zhangsan@qq.com','1');
  10. insert into student(sid,sname,email,isdel)
  11. values(1001,'李四','lisi@qq.com','0');
  12. insert into student values(1003,'王
  13. 五','wangwu@qq.com','0');
复制代码
6.2 更新表记录UPDATE

用来修改指定条件的数据,将满足条件的记录指定列修改为指定值
  1. --更新所有记录的指定字段
  2. UPDATE 表名 SET 字段名1=值1,字段名2=值2,...;
  3. --更新符号条件记录的指定字段
  4. UPDATE 表名 SET 字段名1=值1,字段名2=值2,... WHERE 条件;
复制代码
注意:

  1. #把王五改成王小五
  2. update student set sname='王小五';
  3. #加筛选条件
  4. update student set sname='王小五' where sid = 1003;
  5. update student set sname='王五
  6. 五',isdel='1',email='wangwuwu@qq.com' where sid =
  7. 1003;
复制代码
6.3删除表记录DELETE

语法:
  1. DELETE from 表名 [WHERE 条件];
  2. 或者
  3. truncate table 表名
复制代码
注意:删除数据时要小心
#删除数据
  1. delete from student where sid=1003;
  2. delete from student;
  3. truncate table student;
复制代码
truncate与delete有什么区别?
  1. DELETE 一条一条删除,不清空auto_increment记录数。
  2. truncate 直接将表删除,重新建表,auto_increment将置为零,
  3. 从新开始。
  4. create table student(
  5.    sid int(20) primary key auto_increment,
  6.     sname varchar(60) not null,
  7. email varchar(60),
  8. isdel varchar(10) default '1'
  9. );
  10. #auto_increment设置sid自动增长,默认从1开始
  11. ## 删除所有,不清空自动增长列记录数。
  12. DELETE FROM student;
  13. ## 删除所有,将清空自动增长列记录数。
  14. TRUNCATE TABLE student;
复制代码
7.DQL–简单查询(⭐⭐⭐)

预备数据:
  1. #创建商品表:
  2. create table d_product(
  3. pid int primary key,
  4. pname varchar(20),
  5. price double,
  6. category_id varchar(32)
  7. );
  8. #插入数据
  9. INSERT INTO d_product VALUES ('1', '苹果', '5000',
  10. 'c001');
  11. INSERT INTO d_product VALUES ('2', 'vivo', '3000',
  12. 'c001');
  13. INSERT INTO d_product VALUES ('3', '华为', '5000',
  14. 'c001');
  15. INSERT INTO d_product VALUES ('4', 'oppo', '1000',
  16. 'c001');
  17. INSERT INTO d_product VALUES ('5', '真维斯', '200',
  18. 'c002');
  19. INSERT INTO d_product VALUES ('6', 'only', '440',
  20. 'c002');
  21. INSERT INTO d_product VALUES ('7', '圣迪奥', '800',
  22. 'c002');
  23. INSERT INTO d_product VALUES ('8', 'vero moda',
  24. '800', 'c003');
  25. INSERT INTO d_product VALUES ('9', '相宜本草', '200',
  26. 'c003');
  27. INSERT INTO d_product VALUES ('10', '卫龙辣条', '5',
  28. NULL);
  29. INSERT INTO d_product VALUES ('11', '好想你枣', '56',
  30. NULL);
  31. INSERT INTO d_product VALUES ('12', '香飘飘奶茶',
  32. '3', NULL);
  33. INSERT INTO d_product VALUES ('13', '小浣熊干脆面',
  34. '1', NULL);
  35. INSERT INTO d_product VALUES('14','aop','300',NULL);
  36. INSERT INTO d_product
  37. VALUES('15','p_aop','500',NULL);
  38. INSERT INTO d_product VALUES ('16', 'sda', '53',
  39. NULL);
  40. #创建商品表: COMMENT表示注释
  41. CREATE TABLE emp(
  42. EMPNO int(11) PRIMARY KEY COMMENT '员工编号',  
  43. ENAME varchar(10) COMMENT '员工姓名',
  44. JOB varchar(9) COMMENT '工作',
  45. MGR int(11) COMMENT '经理编号',
  46. HIREDATE date COMMENT '入职日期',
  47. SAL double COMMENT '工资',
  48. COMM double COMMENT '奖金',
  49. DEPTNO int(11) COMMENT '部门号'
  50. );
  51. #插入数据
  52. INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK',
  53. 7902, '1980-12-17', 1002, NULL, 20);
  54. INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN',
  55. 7698, '1981-02-20', 1600, 300, 30);
  56. INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN',
  57. 7698, '1981-02-22', 1250, 500, 30);
  58. INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER',
  59. 7839, '1981-04-02', 2975, 0, 20);
  60. INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN',
  61. 7698, '1981-09-28', 1250, 1400, 30);
  62. INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER',
  63. 7839, '1981-05-01', 2850, NULL, 30);
  64. INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER',
  65. 7839, '1981-06-09', 2450, NULL, 10);
  66. INSERT INTO emp VALUES (7788, 'scott3', 'ANALYST',
  67. 7566, '1987-07-03', 3000, NULL, 20);
  68. INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT',
  69. NULL, '1981-11-17', 5000, NULL, 10);
  70. INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN',
  71. 7698, '1981-09-08', 1500, 0, 30);
  72. INSERT INTO emp VALUES (7876, 'ADAMS', 'CLERK',
  73. 7788, '1987-07-13', 1100, NULL, 20);
  74. INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK',
  75. 7698, '1981-12-03', 950, NULL, 30);
  76. INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST',
  77. 7566, '1981-12-03', 3000, NULL, 20);
  78. INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK',
  79. 7782, '1981-01-23', 1300, NULL, 10);
复制代码
查询语法
  1. select 字段名1 , 字段名2 ,.......
  2. from   表名
  3. [where 筛选条件]
  4. select   *  
  5. from   表名
  6. [where 筛选条件]
  7. 解释: * 通配符,表示所有字段(所有列名)
  8. ● 一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配
  9. 符 * 。使用通配符虽然可以节省输入查询语句的时间,但是获取不需
  10. 要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势
  11. 是,当不知道所需要的列的名称时,可以通过它获取它们。
  12. ● 在生产环境下,不推荐直接使用 SELECT * 进行查询
复制代码
  1. #1.查询所有
  2. select * from d_product;
  3. #2.查询pname和price
  4. select pname,price from d_product;
  5. #3.别名查询.使用的关键字是as(as可以省略的).
  6.    #3.1表别名:
  7.    select d.pname,d.price from d_product as
  8. d,t_product as t;
  9.    #3.2列别名:
  10.    select avg(price) as avgPrice from d_product;
  11.    select category_id cid from d_product;
  12. #4.去掉重复值.
  13. select distinct price from d_product;
  14. #5.查询结果是表达式(运算查询):将所有商品的价格打九折进行显
  15. 示.
  16. select price*0.8 as newPrice from d_product;
  17. #6.空值参与运算(空值就是 null,所有运算符或列值遇到 null值,
  18. 运算的结果都是 null)
  19. 注意:
  20.    ● 在 MySQL 中,null 不等于空字符串或 0 。一个空字符串的
  21. 长度是 0 ,而空值的长度是空。
  22.    ● 在 MySQL 中,null 是占用空间的。
  23. #7.查询员工 id、月薪、奖金率、年薪
  24. SELECT
  25. empno,
  26. sal as "月薪",
  27. comm as "奖金率",
  28. sal * ( 1 + IFNULL( comm, 0 )) * 12 as "年薪"
  29. FROM
  30. emp;
  31. #8.着重号(我们需要保证表中的字段、表名等没有和保留字、数据库系
  32. 统或常用方法冲突,如果真的相同,请在 SQL 语句中使用一对 ``(着
  33. 重号)引起来。)
  34. SELECT * FROM `order` ;
  35. #9.查询常数
  36.    ● 一般来说,我们只从一个表中查询数据,通常是不需要增加一
  37. 个固定的常数列了;但是,如果我们想要整合不同的数据源,用常数列
  38. 作为这个表的标记,就需要查询常数了。
  39.    ● 示例:给员工表增加列字段 company ,这个固定列的值为
  40. "家里蹲大学"
  41. SELECT
  42. '家里蹲大学' company,
  43. ename,
  44. job
  45. FROM
  46. emp;
复制代码
练习题:

  1. #1.查询emp表中员工 12 个月的工资总和,并取名为ANNUAL_SALARY
  2. #2.查询emp表中去除重复的 job 以后的数据
复制代码
8.DQL—行筛选

由于互联网产品中提供的信息通常比较多,用户在使用互联网产品的过程中,可能会碰到查找信息时路径长,甚至无法找到符合的信息和内容的问题。通过筛选功能可以让用户通过设置筛选条件的方式,从产品中大量的信息中敏捷找到符合筛选条件的内容。从而大大低落用户的查找成本,减少用户查找时间,提拔用户体验。从上面的描述中可以看到, 筛选功能的目的是让用户在面对互联网产品中海量的信息和内容时,通过让用户设置筛选条件进行快速的查找和搜刮,缩短用户查找路径。帮助用户快速找到符合条件的内容和信息,节省用户查找信息时间,提拔用户体验


比方:
  1. #查询价格是为偶数的商品信息
  2. select * from d_product where price%2 =0;
  3. select * from d_product where MOD(price,2) =0;
  4. #查询价格为800商品
  5. select * from d_product where price=800;
  6. select * from d_product where not (price>800 or
  7. price <800);
  8. #查询价格不是800的所有商品
  9. select * from d_product where price!=800;
  10. select * from d_product where price>800 or price
  11. <800;
  12. select * from d_product where not(price=800);
  13. select * from d_product where price <> 800;
  14. #查询商品价格大于800元的所有商品信息
  15. select * from d_product where price>800;
  16. #查询商品价格在800到2000之间所有商品
  17. select * from d_product where price>=800 and price
  18. <=2000;
  19. select * from d_product where price between 800 and
  20. 2000;
  21. #查询商品价格是200或800的所有商品
  22. select * from d_product where price=800 or
  23. price=200;
  24. select * from d_product where price in (200 ,800);
  25. #查询含有'o'字的所有商品
  26. select * from d_product where pname like '%o%';
  27. #查询pname中第一个字符含有'o'字的所有商品
  28. select * from d_product where pname like 'o%';
  29. #查询pname中第二个字符含有'o'字的所有商品
  30. select * from d_product where pname like '_o%';
  31. #查询pname中第四个字符含有'o'字的所有商品
  32. select * from d_product where pname like '___o%';
  33. #商品没有分类的商品
  34. select * from d_product where category_id is null;
  35. #查询有分类的商品
  36. select * from d_product where category_id is not
  37. null;
复制代码
练习题:

  1. 1.商品名称以o结尾
  2. select * from d_product where pname like '%o';
  3. 2.筛选价格大于等于800同时小于等于3000的商品
  4. select * from d_product where price>=800 and price
  5. <=3000;
  6. 3.筛选价格不等于800的商品
  7. select * from d_product where price!=800
  8. 4.筛选出价格在800以上,同时包含o字符的商品id和名称、价格
  9. select pid,pname,price from d_product where
  10. price>800 and pname like '%o%';
  11. 5.筛选出价格高于oppo价格的商品
  12. select * from d_product where price>(select price
  13. from d_product where pname='oppo');
复制代码
额外补充

最小值运算符


值。

  1. SELECT
  2. LEAST ( 1, 0, 2 ),    # 整数 返回0
  3. LEAST( 'b', 'a', 'c' ), # 字符串 返回a
  4. LEAST( 1, NULL, 2 )  # 有null 返回null
  5. FROM
  6. DUAL;
复制代码
最大值运算符


  1. SELECT
  2. GREATEST( 1, 0, 2 ),           # 整数 返回2
  3. GREATEST( 'b', 'a', 'c' ),     # 字符串 返回c
  4. GREATEST( 1, NULL, 2 )         # 有null 返回null
  5. FROM
  6. DUAL;
复制代码
ESCAPE


  1. #查询 pname 中第二个字符是 '_' 且第三个字符是 'a' 的商品信
  2. SELECT
  3. *
  4. FROM
  5. d_product
  6. WHERE
  7. pname LIKE '_\_a%' ;
  8. SELECT
  9. *
  10. FROM
  11. d_product
  12. WHERE
  13. pname LIKE '_$_a%' ESCAPE '$';
复制代码
REGEXP 运算符


  1. ‘^’ 匹配以该字符后面的字符开头的字符串。
  2. ‘$’匹配以该字符前面的字符结尾的字符串。
  3. ‘.‘匹配任何一个单字符。
  4. “[...]” 匹配在方括号内的任何字符。例如,“[abc]” 匹配 “a”
  5. 或 “b” 或 “c” 。为了命名字符的范围,使用一个 ‘-’ 。“[a-z]”
  6. 匹配任何字母,而 “[0-9]” 匹配任何数字。
  7. ‘*’ 匹配零个或多个在它前面的字符。例如,“x*” 匹配任何数量的
  8. ‘x’ 字符,“[0-9]*” 匹配任何数量的数字, 而 “*” 匹配任何数量
  9. 的任何字符
复制代码
示例:

  1. SELECT
  2. 'hcj' REGEXP '^h',
  3. 'hcj' REGEXP 'j$',
  4. 'huangchuanjian' REGEXP 'jian'
  5. FROM
  6. DUAL;
复制代码
  1. xpr REGEXP匹配条件 。
  2. - 如果 expr 满足匹配条件,返回 1 ;如果不满足,则返回 0 。若expr 或匹配条件任意一个为 NULL ,则结果为 NULL 。
  3. - REGEXP 运算符在进行匹配时,常用的有下面几种通配符:
复制代码
‘^’ 匹配以该字符后面的字符开头的字符串。
‘$’匹配以该字符前面的字符末端的字符串。
‘.‘匹配任何一个单字符。
“[…]” 匹配在方括号内的任何字符。比方,“[abc]” 匹配 “a”
或 “b” 或 “c” 。为了命名字符的范围,使用一个 ‘-’ 。“[a-z]”
匹配任何字母,而 “[0-9]” 匹配任何数字。
’ 匹配零个或多个在它前面的字符。比方,“x” 匹配任何数目的
‘x’ 字符,“[0-9]” 匹配任何数目的数字, 而 “” 匹配任何数目
的任何字符
  1. ###### 示例:```sqlSELECT
  2. 'hcj' REGEXP '^h',
  3. 'hcj' REGEXP 'j$',
  4. 'huangchuanjian' REGEXP 'jian'
  5. FROM
  6. DUAL;
复制代码
练习题:

  1. #一、将 DDL--表结构操作(重点) 全部重写一遍
  2. #二、根据上述数据完成下面的查询作业
  3. #1.查询商品名称为“卫龙辣条”的商品所有信息:
  4. #2.查询价格为800商品
  5. #3.查询价格不是800的所有商品
  6. #4.查询商品价格大于60元的所有商品信息
  7. #5.查询商品价格在200到1000之间所有商品
  8. #6.查询商品价格是200或800的所有商品
  9. #7.查询含有'霸'字的所有商品
  10. #8.查询以'香'开头的所有商品
  11. #9.查询第二个字为'想'的所有商品
  12. #10.商品没有分类的商品
  13. #11.查询有分类的商品
  14. #12.把商品名为苹果改为苹果14
  15. #13.插入华为手机,价格5999,分类为c001
  16. #14.找到名字长度为6个字符的商品信息
  17. #15.找出oppo同分类的商品信息
  18. #16.删除华为手机信息
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4