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

标题: MySQL基础大全(看这一篇充足!!!) [打印本页]

作者: 数据人与超自然意识    时间: 2024-8-4 17:36
标题: MySQL基础大全(看这一篇充足!!!)

前言

本文仅介绍MySQL基础内容

一、初识MySQL

1.1 数据库基础

数据库(DataBase,DB)是一个长期存储在计算机内的,有组织的,有共享的,同一管理的数据集合。它是一个按数据布局来存储和管理数据的计算机软件系统。即数据库包含两层含义:保管数据的“堆栈”,以及数据管理的方法和技术。
1.2 数据库技术构成

数据库系统由硬件部分和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机,存储设备等。软件部分则主要包括DBMS,支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
1.2.1 数据库系统

数据库系统由三个主要的组成部分:

下图辅助明白:

DBMS像是一个大管家,他接收到我们撰写的SQL之后,根据SQL语法对SQL进行分析,然后去操作数据库,数据库就像是一个堆栈,他根据SQL在堆栈中查找对应的数据,或是抛弃(删除)某些数据,又或是对数据进行变更,然后将结果返回给用户。
1.2.2 SQL语言

对数据库进行查询和修改操作的语言叫做SQL。SQL语言包含以下4个部分:

1.2.3 数据库访问接口

差异的步调计划语言会有各自差异的数据库访问接口,步调语言通过这些接口,实行SQL语句,进行数据库管理。主要的数据库访问接口有:

1.3 什么是MySQL

MySQL是一个小型关系型数据库管理系统,与其他大型数据库管理系统,比方Oracle,DB2,SQL Server等相比,MySQL规模小,功能有限,但是它体积小,速率快,本钱低,且它提供的功能对稍微复杂的应用来说已经够用。
MySQL的上风如下:

二、数据库的基本操作

2.1 数据库创建和删除


2.2 数据库存储引擎

数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建,查询,更新和删除数据操作。差异的存储引擎提供差异的存储机制,索引本事,锁定水平等功能。MySQL的焦点就是存储引擎。
2.2.1 MySQL存储引擎简介

MySQL提供了多个差异的存储引擎,包括处理变乱安全表的引擎和处理非变乱安全表的引擎。在MySQL中,不必要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用差异的存储引擎。show engines;命令查察所有引擎,MySQL支持的存储引擎有以下:

Support列的值体现某种引擎是否可以使用,YES体现可以使用,NO体现不能使用,DEFAULT体现该引擎为当前默认存储引擎。
Transaction体现是否支持变乱,XA体现是否支持分布式的交易处理的XA的规范,Savepoints体现是否支持 保存点。
由此可见MySQL默认搜索引擎是InnoDB。
2.2.2 InnoDB存储引擎

InnoDB变乱型数据库的首选引擎,支持变乱安全表(ACID),支持行锁定和外键。MySQL5.5.5之后,InnoDB作为默认存储引擎,InnoDB主要特性有:

2.2.3 MyISAM存储引擎

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web,数据仓储和其他应用情况下最常用的存储引擎之一。MyISAM拥有较高的插入,查询 速率,但不支持变乱。MyISAM主要特性有:

2.2.4 存储引擎的选择

差异的存储引擎都有各自的特点,以适应差异的需求。
功能InnoDBMyISAMMemoryArchive存储限定64TB256TBRAMNone支持变乱是否否否支持全文索引否是否否支持树索引是是是否支持哈希索引否否是否支持数据缓存是否N/A否支持外键是否否否 如果要提供提交,回滚和崩溃恢复能力的变乱安全(ACID)能力,并要求实现并发控制,InnoDB是个很好的选择。如果数据表 主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;如果只是暂时存放数据,数据量不大,而且不必要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为暂时表,存放查询的中间结果。如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive周到可以支持高并发的插入操作,但是本身并不是变乱安全的。Archive存储引擎非常适合存储归档数据,如记录日志信息。
三、数据表的基本操作

3.1 创建数据表


3.2 修改数据表

修改表是指修改数据库中已经存在的数据表的布局。MySQL使用ALTER TABLE语句修改表。常用的修改表的操作有:修改表名,修改字段数据范例或字段名,增加和删除字段,修改字段的排列位置,更改表的存储引擎,删除表的外键约束等。

3.3 删除数据表


3.4 查察数据表布局

语法:DESCRIBE 表名;大概简写为 DESC 表名;

查察数据表具体布局语法:SHOW CREATE TABLE <表名\G>;
使用SHOW CREATE TABLE语句,不但可以查察表创建时候的具体语句,而且还可以查察存储引擎和字符编码。加上参数\G之后,可以使结果更加直观,易于查察。

四、数据范例和运算符

4.1 MySQL数据范例介绍

MySQL支持多种数据范例,主要有数值范例,日期/时间范例和字符串范例

4.1.1 整数范例

数值型数据范例主要用来存储数字,MySQL提供了多种数值数据范例,差异的数据范例提供差异的取值范围,可以存储的值范围越大,其所必要的存储空间也会越大。
MySQL中的整数型数据范例以及取值范围:
范例名称说明存储需求有符号无符号TINYINT很小的整数1个字节-128~1270~255SMALLINT小的整数2个字节32768~327670~65535MEDIUMINT中等大小的整数3个字节-8388608~83886070~16777215INT(INTEGER)平常大小的整数4个字节-2147483648~21474836470~4294967295BIGINT大整数8个字节-9223372036854775808~92233720368547758070~18446744073709551615 当我们创建表和列的时候,给列指定数据范例以及长度,比方year INT(4),括号中显示的11是宽度,宽度和数据范例的取值范围是无关的。显示宽度只是指明MySQL最大大概显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该范例整数的取值范围,数值依然可以插入,而且可以大概显示出来。比方,如果向year字段插入一个数值19999,即使数值宽度超过了设定的4宽度,但19999依然在INT范例的取值范围内,所以MySQL依然显示完整的19999,而不是1999。
宽度只是用于显示,并不能限定取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,而且答应的最大值也不会是999,而是INT整型所答应的最大值。
其他整数数据范例也可以在界说表布局时指定所必要的显示宽度,如果不指定,则系统为每一种范例指定默认的宽度值。
4.1.2 浮点数范例和定点数范例

MySQL中使用浮点数和定点数来体现小数。浮点范例有两种:单精度浮点数(FLOAT)和双精度浮点范例(DOUBLE)。定点范例只有一种:DECIMAL。浮点范例和定点范例都可以用(M,N)来体现,M称为精度,体现总共的位数,N称为标度,是体现小数的位数。
MySQL中的浮点数和定点数数据范例以及取值范围:
范例名称说明存储需求有符号无符号FLOAT单精度浮点数4个字节-3.402823466E+38~-1.175494351E-380和1.175494351E-38~3.402823466E+38DOUBLE双精度浮点数8个字节-1.7976931348623157E+308~-2.2250738585072014E-3080和2.2250738585072014E-308~1.7976931348623157E+308DECIMAL(M,D),DEC压缩的“严酷”定点数M+2个字节 DECIMAL范例差异于FLOAT和DOUBLE,DOUBLE实际是以串存放的,DECIMAL大概的最大取值范围与DOUBLE一样,但是其有效的取值范围由M和D的值决定。如果改变M而固定D,则其取值范围将随M的变大而变大。
岂论是定点还是浮点范例,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
比方:

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/22cfbd56f1784c23902fc78e307b1ab3.png

FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL如不指定精度默认为(10,0)。
浮点数相对于定点数的优点是在长度肯定的情况下,浮点数可以大概体现更大的数据范围;它的缺点就是会引起精度问题。
在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候(如钱币,科学数据等)使用DECIMAL的范例比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点型时必要注意,并尽量避免做浮点数比较。
4.1.3 日期和时间范例

MySQL中有多种体现日期的数据范例,主要有:DATETIME,DATE,TIMESTAMP,TIME和YEAR。
日期与时间范例:
范例名称日期格式日期范围存储需求YEARYYYY1901~21551字节TIMEHH:MM:SS-838:59:59~838:59:593字节DATEYYYY-MM-DD1000-01-01~9999-12-313字节DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:598 字节TIMESTAMPYYYY-MM-DD HH:MM:SS1907-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC4字节
下面示例辅助明白:
SQL语句

结果

SQL语句

结果

SQL语句

结果


下面示例辅助明白:
SQL语句

结果

SQL语句

结果

SQL语句

结果

SQL语句(插入当前数据库地点的系统时间)

结果


下图示例辅助明白:
SQL语句

结果

SQL语句

结果

SQL语句

结果

SQL语句

结果

SQL语句

结果

这是由于MySQL答应“不严酷”语法:任何标点符号都可以作用日期部分之间的间隔符。比方‘98-12-21’,‘98.12.21’,‘98@12@21’是等价的,这些值可以精确的插入到数据库。

下图示例辅助明白:
SQL语句

结果

SQL语句

结果

在数据库插入当前系统时间(当前是东八区)
设置当前时区为东十区
再次查询时,时间以东十区显示(实际数据库中存储的还是东八区时间,如下所示)

4.1.4 字符串范例

字符串范例用来存储字符串数据,除了可以存储字符串数据外,还可以存储其他数据,比如图片和声音的二进制数据。字符串可以进行区分大概不区分大小写的串比较,另外,还可以进行模式匹配查找。
MySQL字符串数据范例:
范例名称说明存储需求CHAR(M)固定长度非二进制字符串M字节,1<=M<=255VARCHAR(M)变长非二进制字符串L+1字节,在此L<=M和1<=M<=255TINYTEXT非常小的非二进制字符串L+1字节,在此L<2^8TEXT小的非二进制字符串L+2字节,在此L<2^16MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此L<2^24LONGTEXT大的非二进制字符串L+4字节,在此L<2^32ENUM罗列范例,只能有一个罗列字符串值1或2个字节,取决于罗列值的数目(最大值65535)SET一个设置,字符串对象可以有零个或多个SET成员1,2,3,4或8个字节,取决于集合成员的数目(最多64个成员) VARCHAR,BLOB和TEXT范例是变长范例,对于其存储需求取决于列值的实际长度(在前面的表格中用L体现),而不是取决于范例的最大大概尺寸。比方,一个VARCHAR(10)列能保存最大长度为10个字符的一个字符串,实际的存储必要是字符串的长度L,加上1个字节以记录字符串长度。比方:对于字符“abcd”,L是4而存储要求是5个字节。
4.1.5 二进制范例

MySQL支持两类字符型数据:文本字符串和二进制字符串。
MySQL中的二进制数据范例:
范例名称说明存储需求BIT(M)位字段范例大约(M+7)/8个字节BINARY(M)固定长度二进制字符串M个字节VARBINARY(M)可变长度二进制字符串M+1个字节TINYBLOB(M)非常小的BLOBL+1字节,在此L<2^8BLOB(M)小BLOBL+2字节,在此L<2^16MEDIUMBLOB(M)中等大小的BLOBL+3字节,在此L<2^24LONGBLOB(M)非常大的BLOBL+4字节,在此L<2^32 4.2 怎样选择数据范例

MySQL提供了大量的数据范例,为了优化存储,进步数据库性能,在任何情况下均应使用最精确的范例。
4.3 常见运算符介绍

运算符毗连表达式中各个操作数,其作用是指明对操作数所进行的运算。
4.3.1 算术运算符

用于各类数值运算,包括加(+),减(-),乘(*),除(/),求余(或称模运算,%)。
4.3.2 比较运算符

用于比较的运算符。一个比较运算符的结果总是1,0,大概是null,比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。
MySQL中的比较运算符
运算符作用=等于<=>安全的等于<>(!=)不等于<=小于等于>=大于等于>大于IS NULL判定一个值是否为nullIS NOT NULL判定一个值是否不为nullLEAST在有两个或多个参数时,返回最小值GREATEST在有两个或多个参数时,返回最大值BETWEEN AND判定一个值是否落在两个值之间ISNULL与IS NULL作用雷同IN判定一个值是IN列表中的恣意一个值NOT IN判定一个值不是IN列表中的恣意一个值LIKE通配符匹配REGEXP正则表达式匹配
4.3.3 逻辑运算符

在MySQL中,逻辑运算符的求值结果为1(TRUE),0(FALSE)和NULL。
MySQL中的逻辑运算符
运算符作用NOT大概!逻辑非AND 大概 &&逻辑与OR逻辑或XOR逻辑异或 4.3.4 位运算符

位运算符是用来对二进制字节中的位进行测试,移位大概测试处理。
MySQL中的位运算符
运算符作用l位或&位与^位异或<<位左移>>位右移~位取反,反转所有比特 4.3.5 运算符优先级

运算符按照优先级由低到高排列

五、MySQL函数

5.1 MySQL函数简介

函数体现对输入参数值返回一个具有特定关系的值,MySQL提供了大量丰富的函数,在进行数据库管理以及数据的查询和操作时会经常用到各种函数。通过对数据的处理,数据库功能可以变得更加强大,更加灵活地满足差异用户的需求。
5.2 数学函数


5.3 字符串函数


5.4 时间和日期函数


5.5 条件判定函数

条件判定函数也称为控制流程函数,根据满足的条件的差异,实行相应的流程。

5.6 系统信息函数


5.7 加密函数


5.8 其他函数


六、数据的增删改查

6.1 基本查询数据

MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是:
SELECT {*|<字段列表>}
[FROM<表1>,<表2>…
WHERE<表达式>
GROUP BY<>
HAVING
ORDER BY<>
LIMIT
]
具体解释:

6.2 单表查询数据


6.3 使用集合函数查询


6.4 毗连查询


6.5 子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询。子查询可以添加到SELECT,UPDATE,DELETE语句中,而且可以进行多层嵌套。

提示:所有有关子查询的操作过程,先实行最内层子查询,再实行外层查询,最内层子查询的结果作为外部查询的比较条件。
6.6 合并查询结果

UNION大概UNION ALL
两者区别:UNION ALL 的功能是不删除重复行,加上ALL 关键字语句实行时所必要的资源少,所以尽大概的使用它,因此知道有重复行但是想保存这些行,确定查询结果中不会有重复数据大概不必要去掉重复数据的时候,应当使用UNION ALL 以进步查询效率。
6.7 为表和字段取别名

表名 [AS] 表别名
列名 [AS] 列别名
6.8 使用正则表达式查询

正则表达式常用字符匹配列表:
选项说明列子匹配值示例^匹配文本的开始字符'^b’匹配以字母b开头的字符串book,big,banana,bike$匹配文本的结束字符'st$'匹配以st末端的字符串test,resist,persist.匹配任何单个字符'b.t’匹配以任何b和t之间有一个字符bit,bat,but,bite*匹配零个或多个在它前面的字符'f*n’匹配字符n前面有恣意个字符ffn,fan,faan,abcn+匹配前面的字符1次或多次'ba+'匹配以b开头背面紧跟至少有一个aba,bay,bare,battle<字符串>匹配包含指定的字符串的文本‘fa’fan,afa,faad[字符集合]匹配字符集中的任何一个字符'[xz]'匹配x大概zdizzy,zebra,x-ray,extra[^]匹配不在括号中的任何字符[^abc]'匹配任何不包含a,b,c的字符串desk,fox,f8ke字符串{n,}匹配前面的字符串至少n次b{2}匹配2个或更多的bbbb,bbbb,bbbbbbb字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数b[2,4]匹配最少2个,最多4个bbb,bbb,bbbb SQL举例:
(1)查询字符“^”匹配以特定字符串大概字符串开头的文本。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^b’;(查询以b开头的数据)
(2)查询“$”匹配以特定字符大概字符串末端的文本。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘y$’;(查询以y末端的记录)
(3)用符号“.”来替代字符串中的恣意一个字符
SELECT * FROM 表名 WHERE 列名 REGEXP ‘a.g’;
查询语句中“a.g”指定匹配字符中要有字母a和g,且两个字母之间包含单个字符,并不限定匹配的字符的位置和地点查询字符串的总长度。
(4)使用“”和“+”来匹配多个字符
星号“
”匹配前面的字符恣意多次,包括0次。加好“+”匹配前面的字符至少一次。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^ba*’;(必须是以b开头,a可有可无,由于星号是包含零次的)
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^ba+';(必须是以b开头,且a字母必须出现一次)
(5)匹配指定字符串
使用“|”匹配多个字符串
SELECT * FROM 表名 WHERE 列名 REGEXP 'on|ap
’;(查询包含字符串“on”大概“ap”的记录)
(6)匹配指定字符中的恣意一个
使用方括号[]指定一个字符集合,只匹配其中恣意一个字符,即为所查找的文本
SELECT * FROM 表名 WHERE 列名 REGEXP ‘[ot]';(查询字段中包含字母o大概t的记录)
匹配集合写法:比方:[1-9]匹配1到9之间的恣意数字,[a-z]匹配a~z之间的恣意字母
(7)匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符
SELECT * FROM 表名 WHERE 列名 REGEXP ‘[^a-p1-9]’;(匹配出字母a-p和数字1-9之外的记录)
(8)使用{n,}大概{n,m}来指定字符勾通续出现的次数
子字符串{n,}体现至少匹配n次前面的字符:“字符串{n,m}”体现匹配前面的字符串不少于n次,不多于m次。比方,a{2,}体现字母a连续出现至少2次,也可以大于2次;a{2,4}体现字母a连续出现最少2次,最多不超过4次。
SELECT * FROM 表名 WHERE 列名 REGEXP 'x{2,}
’;
6.9 数据的新增

(1)语法:INSERT INTO 表名(列名)VALUES (数值);大概INSERT INTO 表名 VALUES (数值);包管数值插入顺序和字段名同等,就不用再写字段名。
(2)INSERT INTO person(name,age,info) VALUES(‘HSUDH’,28,‘SHUAHD’),(‘HSUQW’,21,‘AHD’),(‘H’,47,‘WEQ’)

INSERT INTO person(name,age,info) VALUES(‘HSUDH’,28,‘SHUAHD’);INSERT INTO person(name,age,info) (‘HSUQW’,21,‘AHD’)效率更高。由于MySQL实行单条INSERT语句插入多行数据,比使用多条INSERT语句快。所以在插入多条记录时,最好选择使用单条INSERT语句的方式插入。
6.10 数据的修改

(1)语法:UPDATE 表名 SET 列名1=value1,列名2=value2,列名3=value3,…,列名n=valuen WHERE (查询条件)
6.11 数据的删除

(1)语法:DELETE FROM 表名 [WHERE (查询条件)]
(2)如果想删除表中的所有记录,还可以使用TRUNCATE TABLE语句,TRUNCATE将直接删除原来的表并重新创建一个表,其语法布局为TRUNCATE TABLE table_name。TRUNCATE 直接删除而不是删除记录,因此实行速率比DELETE快。
七、索引

7.1 索引简介

索引是对数据库表中一列或多列的值进行排序的一种布局,使用索引可进步数据库中特定数据的查询速率。
7.1.1 索引的含义和特点

索引是一个单独的,存储在磁盘上的数据库布局,他们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列范例都可以被索引,对干系列使用索引是进步查询操作速率的最佳途径。
比方:数据库中有2万条记录,如今要实行这样一个查询:SELECT * FROM 表名 WHERE num = 10000。如果没有索引,必须遍历整个表,直到num等于10000的这一行被找到为止;如果在num列上创建索引,MySQL不必要任何扫描,直接在索引里面找10000,就可以得知这一行的位置。
索引是在存储引擎中实现的,因此,每种存储引擎的索引都不肯定完全雷同,而且每种存储引擎也不肯定支持所有索引范例。根据存储引擎界说每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限定。MySQL中索引的存储范例有两种:BTREE和HASH,具体和表的存储引擎干系;MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
索引的优点:

索引的缺点:

7.1.2 索引的分类

(1)平常索引和唯一索引
平常索引是MySQL中基本索引范例,答应在界说索引的列中插入重复值和空值。
唯一索引,索引列的值必须唯一,但答应空值。如果是组合索引,则列值组合必须唯一。
主键索引是一种特别的唯一索引,不答应有空值。
(2)单列索引和组合索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会使用、使用组合索引时遵照最左前缀集合。
(3)全文索引
全文索引范例为FULLTEXT,在界说索引的的列上支持值的全文查找,答应在这些索引列中插入重复值和空值。MySQL中只有MyISAM存储引擎支持全文索引。
(4)空间索引
空间索引是对空间数据范例的字段建立的索引,MySQL中的空间数据范例有4种,分别是:GEOMTRY,POINT,LINESTRING,POLYGON。MySQL使用SPATIAL关键字进行扩展,使得可以大概用于创建正规索引类似的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MyISAM的表中创建。
7.1.3 索引的计划原则


7.2 创建索引

(1)语法:
CREATE TABLE table_name[col_name_data_type]
[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name[length]) [ASC|DESC]
UNIQUE,FULLTEXT,SPATIAL为可选参数,分别体现唯一索引,全文索引和空间索引;INDEX和KEY为同义词,两者作用雷同,用来指定创建索引;col_name为必要创建索引的字段列,index_name指定索引的名称,为可选参数,如果不指定,MySQL默认col_name为索引值,length为可选参数,体现索引的长度,只有字符串范例的字段才能指定索引长度;ASC或DESC指定升序户降序的索引值存储。
提示:组合索引服从“最左前缀”,使用索引中最左边的列集来匹配行,这样的列表称为最左前缀。比方这有由id,name,age3个字段组合的索引,索引行中按id/name/age的顺序存放,索引可以由下面字段组合:(id,name,age),(id,name)或id。如果列不构成索引最左面的前缀,MySQL不能使用局部索引,如age大概(name,age)组合则不能使用索引。
(2)查察某一个查询语句是否使用索引
explain SELECT查询语句\G;
(3)查察整个表的索引布局
SHOW INDEX FROM 表名\G
7.3 删除索引

ALTER TABLE 表名 DROP INDEX 索引名;
DROP INDEX 索引名 ON 表名;
提示:添加了AUTO_INCREMENT约束字段的唯一索引不能被删除。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




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