存储引擎是数据库管理系统用来从数据库创建、读取和更新数据的软件模块。MySQL中有两种类型的存储引擎:事务型和非事务型。 对于MySQL 5.5及更高版本,默认的存储引擎是InnoDB。在5.5版本之前,MySQL的默认存储引擎是MyISAM。 那么mysql存储引擎有哪些? 一、InnoDB 这是MySQL 5.5或更高版本的默认存储引擎。它提供了事务安全(ACID兼容)表,支持外键引用完整性约束。它支持提交、回滚和紧急恢复功能来保护数据。它还支持行级锁定。当在多用户环境中使用时,它的“一致非锁定读取”提高了性能。它将数据存储在集群索引中,从而减少了基于主键的查询的I/O。 二、MyISAM 该存储引擎管理非事务性表,提供高速存储和检索,支持全文搜索。 三、MEMORY 提供内存中的表,以前称为堆。它在RAM中处理所有数据,以便比在磁盘上存储数据更快地访问。用于快速查找引用和其他相同的数据。 四、MERGE 将多个类似的MyISAM表分组为一个表,可以处理非事务性表,默认情况下包括这些表。 五、EXAMPLE 你可以使用此引擎创建表,但不能存储或获取数据。这样做的目的是教开发人员如何编写新的存储引擎。 六、ARCHIVE 用于存储大量数据,不支持索引。 七、CSV 在文本文件中以逗号分隔值格式存储数据。 八、BLACKHOLE 受要存储的数据,但始终返回空。 九、FEDERATED 将数据存储在远程数据库中。 相关推荐:《MySQL教程》 本篇文章就是关于mysql存储引擎有哪些的介绍,希望对需要的朋友有所帮助! 以上就是mysql存储引擎有哪些?的详细内容,更多请关注php中文网其它相关文章!
本篇文章给大家带来的内容是关于MySQL中utf8和utf8mb4编码有什么区别?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 三、问题根源 最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。 Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100) Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。 要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。 以上就是MySQL中utf8和utf8mb4编码有什么区别?的详细内容,更多请关注php中文网其它相关文章!
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折
2024-12-21
在MySQL中如何导入格式化数据?本篇文章就来给大家介绍MySQL导入格式化数据的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在有些场景下,我们需要把一批特定格式的数据导入到mysql数据库中,做法有很多,使用shell脚本、python都可以,今天来介绍两个更便捷的命令,mysqlimport 和 load data mysqlimport 使用方法 mysqlimport [options] db_name textfile1 [textfile2 ...] # db_name 对应数据库名称 # textfile 文件名,对应要插入的数据库表名 # 比如:mysqlimport a8 campaign.txt 会把campaign.txt中的数据插入到a8数据库中的campaign表 注意:campaign.txt文件必须在/usr/local/mysql/var/a8/目录下,即数据库所在目录 如果不在对应的目录下,会返回以下错误: mysqlimport -uroot -p123456 -hlocalhost -P3306 a8 campaign.txt /usr/local/mysql/bin/mysqlimport: Error: File '/usr/local/mysql/var/a8/campaign.txt' not found (Errcode: 2), when using table: campaign 常用选项 --columns=id,name,creator... # 对应的数据表列名,定义被导入文件中的每一列对应的数据库表列名 --fields-terminated-by= # 文件字段以什么分隔,参数为字符串,默认为\t --fields-enclosed-by= # 数据域用什么符号扩起来,默认为空,一般可以是双引号、括号等 --fields-optionally-enclosed-by= # 数据域可以用什么符号括起来,因为为只有部分数据用这些符号括起来 --fields-escaped-by= # 转义字符,参数为字符,默认为\ --lines-terminated-by= # 数据行以什么结束,参数为字符串,windows默认为\r\n --user=user_name 或 -u user_name --password=[password] 或 -p[password] --host=host_name 或 -h hostname --port=port_num,或 -P port_num # 定义用户名、密码、mysql服务器地址和用于连接的TCP/IP端口号,默认为mysql默认端口3306 --ignore-lines=n # 忽视数据文件的前n行,因为很多数据文件前面有表头 --delete -D # 在把文件中的数据插入前删除表中原先的数据 --local -L # 指定从客户端电脑读入数据文件,否则从服务器电脑读取 --lock-tables -l # 处理文本文件前锁定所有表以便写入,确保所有表在服务器上保持同步 --protocol={TCP | SOCKET | PIPE | MEMORY} 使用的连接协议 --force -f #忽视错误。例如,如果某个文本文件的表不存在,继续处理其它文件,不使用--force,如果表不存在则mysqlimport退出 --compress -C # 压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩) --silent,-s # 沉默模式,只有出现错误时才输出 --socket=path,-S path # 当连接localhost时使用的套接字文件(为默认主机) --verbose,-v # 冗长模式。打印出程序操作的详细信息。...
本篇文章给大家带来的内容是关于Mac下MySQL环境搭建的步骤详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Mac 下安装 MySQL 还是很方便的, 总结来看有2个方法。 方法一:用dmg镜像安装 1、安装 官网下载好 MySQL Mac 版安装包,常规步骤安装,安装过程中会出现如下提示: 2019-03-24T18:27:31.043133Z 1 [Note] A temporary password is generated for root@localhost: TdfRm19!o0Xi 其中TdfRm19!o0Xi是初始密码,最好先记住! 2、登陆 在终端命令行 登陆mysql: $ mysql -u root -p # 输入上述密码即可 如果这一步提示: bash: mysql: command not found, 执行下面2个命令做个软连接即可: cd /usr/local/bin ln -fs /usr/local/mysql-8.0.11-macos10.13-x86_64/bin/mysql mysql 3、修改密码 在 MySQL8.0.4 以前,执行 SET PASSWORD=PASSWORD('新密码') 即可。但新版本不能这样改了,因为密码认证变了。具体步骤可以参考 https://blog.csdn.net/yi247630676/article/details/80352655。 方法二:用 Homebrew 进行安装 总所周知,Mac 可以利用 homebrew 进行安装管理,十分方便,如果没有安装 homebrew, 可以点击 https://brew.sh/ 安装。 下面是 mysql 的安装方式 $ brew install mysql # 安装指定版本: brew install mysql@1.1.1 接下来只要等待就可以了,出现下面文字后我们已经很清楚我们需要做什么了: ==> mysql We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -u root To have launchd start mysql now and restart...
在前面的文章中,我们给大家介绍《mysql数学函数的简单总结》,下面我们继续为大家简单整理了SQL Server数学函数。 Transact-SQL包含许多可以与SQL Server一起使用的数学函数。 可以在SQL Server 2012及更高版本中使用以下标量函数。这些函数中的大多数接受一个或多个参数,并将根据提供的参数返回一个数值。 ABS() 返回指定数值表达式的绝对(正)值。换句话说,它允许您确定数字是正数,负数还是零。 ACOS() 返回反余弦。换句话说,它以弧度为单位返回角度,其余弦值是指定的浮点表达式。 ASIN() 返回反正弦。换句话说,它返回以弧度表示的角度,其正弦值是指定的浮点表达式。 ATAN() 返回反正切值。换句话说,它以弧度为单位返回角度,其切线是指定的浮点表达式。 ATN2() 返回正x轴与从原点到点(y,x)的光线之间的角度(以弧度表示),其中x和y是两个指定的float表达式的值。 CEILING() 允许您将数字四舍五入到最接近的整数。它返回大于或等于指定数值表达式的最小整数。 COS() 返回指定表达式中指定角度的三角余弦值(以弧度为单位)。 COT() 返回指定float值表达式中指定角度的三角余切值(以弧度表示)。 DEGREES() 让我们从弧度转换为度数。具体来说,此函数返回以弧度指定的角度的相应角度(以度为单位)。 EXP() 返回指定的float表达式的指数值。 FLOOR() 可以向下舍入到最接近的整数。它返回小于或等于指定数值表达式的最大整数。 LOG() 返回指定的float表达式的自然对数。 LOG10() 返回指定的float表达式的以10为底的对数。 PI() 返回PI的常量值。 POWER() 将指定表达式的值返回到指定的幂。 RADIANS() 允许您将度数转换为弧度。具体来说,它在输入数字表达式(以度为单位)时返回弧度。 RAND() 返回从0到1的伪随机浮点值,不包括。 ROUND() 返回一个数值,舍入为指定的长度或精度。 SIGN() 返回指定表达式的正(+1),零(0)或负(-1)符号。 SIN() 返回指定角度的三角正弦值(以弧度为单位)和近似数值浮点表达式。 SQRT() 返回指定float值的平方根。 SQUARE() 返回指定float值的平方。 TAN() 返回输入表达式的正切值。 除RAND()之外的所有函数都是确定性的。这意味着每次用一组特定的输入值调用它们时,它们返回相同的结果。RAND()仅在指定子参数时才具有确定性。 相关推荐:《SQL教程》《MySQL教程》 以上就是SQL Server数学函数的简单总结的详细内容,更多请关注php中文网其它相关文章!
mysql中索引类型有:最基本的没有限制的普通索引,索引列的值必须唯一的唯一索引,主键索引,多个字段上创建的组合索引以及用来查找文本中的关键字的全文索引 【推荐课程:MySQL教程】 MySQL中的索引类型有以下几种 普通索引 唯一索引 主键索引 组合索引 全文索引 1、普通索引 是最基本的索引,它没有任何限制。它有以下几种创建方式: 直接创建索引 CREATE INDEX index_name ON table(column(length)) 修改表结构的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) 创建表的时候同时创建索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) ) 删除索引 DROP INDEX index_name ON table 2、唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式: 创建唯一索引 CREATE UNIQUE INDEX indexName ON table(column(length)) 修改表结构 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length)) 创建表的时候直接指定 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , UNIQUE indexName (title(length)) ); 3、主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引: CREATE TABLE `table` (...
MySQL包含了很多函数和运算符,可以帮助我们处理数据。下面我们就给大家整理出MySQL中可用的数学函数,希望对需要的朋友有所帮助! ABS()返回给定值的绝对值。 ACOS()返回数字的反余弦值。 ASIN()返回数字的反正弦值。 ATAN()返回一个或多个值的反正切值。 ATAN2()返回两个参数的反正切。 CEIL()同义词是CEILING()。 CEILING()将一个数字四舍五入到最近的整数(返回不小于其参数的最小整数)。 CONV()转换不同数字基数之间的数字。 COS()返回数字的余弦值。 COT()返回数字的余切。 CRC32()计算循环冗余校验值。 DEGREES()从弧度转换为度数。 EXP()返回e到x的幂。 FLOOR()将数字向下舍入到最接近的整数(返回不大于参数的最大整数值)。 LN()返回数字的自然对数。 LOG()返回数字的自然对数。还允许您指定基数。 LOG10()返回参数的以10为底的对数。 LOG2()返回参数的以2为底的对数。 MOD()执行模运算。返回N除以M的余数。 PI()返回π(pi)的值。 POW()将引发的参数返回到指定的幂。 POWER()同义词POW()。 RADIANS()将值从度转换为弧度,并返回结果。 RAND()返回随机浮点值。 ROUND()将数字向上或向下舍入到给定的小数位数。 SIGN()返回参数的符号(这样您就可以知道数字是正数还是负数)。 SIN()返回参数的正弦值。 SQRT()返回参数的平方根。 TAN()返回参数的正切值。 TRUNCATE()将值截断为指定的小数位数。 相关推荐:《mysql教程》 以上就是MySQL数学函数的简单总结的详细内容,更多请关注php中文网其它相关文章!
MySQL更新语句也就是MySQL中的update语句,当我们需要更新或者修改表中的数据时,就会使用这个update语句,下面我们就来看一下mysql更新语句的具体写法。 MySQL中update语句用于更新表中的现有数据。亦可用UPDATE语句来更改表中单个行,一组行或所有行的列值。 MySQL中UPDATE语句的语法: 单表 UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] value: {expr | DEFAULT}assignment:col_name = value assignment_list:assignment [, assignment] ... 多表 UPDATE [LOW_PRIORITY] [IGNORE] table_references SET assignment_list [WHERE where_condition] UPDATE语句更新表时需要注意的是: UPDATE关键字后面指定要更新数据的表名。 SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。 使用WHERE语句中的条件指定要更新的行。WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。 如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。 LIMIT子句用于给定一个限值,限制可以被更新的行的数目。 多表更新时ORDER BY和LIMIT不能被使用。 使用update语句修改表时: 单表修改是指修改指定单个表中的已经存在数据的一个或多个列的数值;set短语后面跟要修改的列和值; where子句表示限定要修改表中的哪些数据,如果没有where子句则表示所有行都要修改; order by子句表示update数据按照指定的顺序进行; limit子句表示限定修改数据的行数; 多表修改是指修改table_references指定的多个表中满足条件的行数据,多表修改不允许使用order by和limit子句。 本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的MySQL视频教程栏目! 以上就是mysql更新语句怎么写?的详细内容,更多请关注php中文网其它相关文章!
本篇文章给大家带来的内容是关于MySQL执行过程以及查询缓存的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 MySQL执行一个查询过程:当我们向MySQL发送一个请求的时候,MySQL到底做了什么: 1.客户端发送一条查询给服务器2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。3.服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。4.MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询5.将结果返回给客户端。 mysql 主要是由 server 层和存储层两部分构成的。server 层主要包括连接器、查询缓存,分析器、优化器、执行器。存储层主要是用来存储和查询数据的,常用的存储引擎有 InnoDB、MyISAM, (1) MySQL客户端/服务器通信协议 MySQL客户端和服务器之的通信协议是“半双工”的,这就意味着,在任何一个时刻,要么是由服务器向客户端发送数据,要么是由客户端向服务器发送数据,这两个动作不能同时发生。所以我们无法也无须将一个消息切成小块独立来发送。 优缺点:这种协议让MySQL通信简单快速,但是也从很多地方限制了 MySQL。一个明显的限制是,这意味着没法进行流量控制。一旦一端开始发送消息,另一端要接收完整个消息才能响应它。这就像采回抛球的游戏:在任何时刻,只有一个人能控制球,而且只有控制球的人才能将球抛回去(发送消息)。 (2).连接器 MySQL客户端和服务端建立连接,获取当前连接用户的权限 (3)查询缓存在解析一个查询语句之前,如果查询缓存是打开的,MySQL会检查这个缓存,是否命中查询缓存中的数据。这个检查是通过一个大小写敏感的哈希查找实现的。查询和缓存中的查询即使只有一个字节不同,那也不会匹配缓存结果,这种情况下查询就会进入下一阶段的处理。 如果当前的查询恰好命中了查询缓存,那么在返回查询结果之前 MySQL会检查一次用户权限。这仍然是无须解析查询SQL语句的,因为在查询缓存中已经存放了当前查询需要访问的表信息。如果权限没有问题, MySQL会跳过所有其他阶段,直接从缓存中拿到结果并返回给客户端。这种情况下,查询不会被解析,不用生成执行计划,不会被执行. ps:注意在 mysql8 后已经没有查询缓存这个功能了,因为这个缓存非常容易被清空掉,命中率比较低。 (3).分析器 既然没有查到缓存,就需要开始执行 sql 语句了,在执行之前肯定需要先对 sql 语句进行解析。分析器主要对 sql 语句进行语法和语义分析,检查单词是否拼写错误,还有检查要查询的表或字段是否存在 (4)查询优化 查询的生命周期的下一步是将一个SQL转换成一个执行计划, MySQL再依照这个执行计划和存储引擎进行交互。这包括多个子阶段:解析SQL、预处理、优化SQ执行计划。这个过程中任何错误(例如语法错误)都可能终止查询。 2.关于查询缓存 (1)MySQL 判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用。MySOL查询缓存保存查询返回的完整结果。当查询命中该缓存, MySQL会立刻返回结果跳过了 解析,优化和执行阶段 查询缓存系统会跟踪查迫中涉及的每个表,如果这些表发生变化,那么和这个表相关的的存数据都将失效。 这种机制效率看起来比较低,因为数据表变化时很有可能对查询结果并没有变更,但是这种简单实现代价很小,而这点对于一个非常繁忙的系统来说非常重要。 查询缓存系统对应用程序是完全透明的。应用程序无须关心 MySQL是通过查询缓存返回的结果还是实际执行返回的结果。事实上,这两种方式执行的结果是完全相同的。换句话说,查询缓存无须使用任何语法。无论是 MYSQL开启成关闭查询缓在,对应用程序都是透明的。 (2)判断缓存命中 当判断缓存是否命中时, MySQL不会解析、“正规化”或者参数化查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息,在字符上不同,例如空格、注释,在何的不同,都会导致缓存的不中。 当查询语句中有一些不确定的数据时,则不会被缓存,例如包含函数NOW()或者 CURRENT_DATE()的查询不会被缓存. 误区:我们常听到:“如果查询中包含一个不确定的函数, MySQL则不会检查查询缓存”。这个说法是不正确的。 因为在检查查询缓存的时候,还没有解析SQL语句,所以MySQL并不知道查询语句中是否包含这类函数。 在检查查询缓存之前, MySQL只做一件事情,就是通过一个大小写不敏感的检查看看SQL语句是不是以5EL开头。 准确的说法应该是:“如果查询语句中包含任何的不确定函数,那么在查询缓存中是不可能找到缓存结果的”。 注意点:MySQL的查询缓存在很多时候可以提升查询性能,在使用的时候,有一些问题需要特别注意。首先,打开查询缓存对读和写操作都会带来额外的消耗: 1.读查询在开始之前必须先检查是否命中缓存2.如果这个读查询可以被缓存,那么当完成执行后, MySQL若发现查询缓存中没有这个查询,会将其结果存入查询缓存,这会带来额外的系统消耗。3.这对写操作也会有影响,因为当向某个表写入数据的时候, MySQL必须将对应表的所有缓存都设置失效。如果查询缓存非常大或者碎片很多,这个操作就可能会带来大系统消耗(设置了很多的内存给查询缓存用的时候) 如果查询缓存使用了很大量的内存,缓存失效操作就可能成为一个非常严重的问题瓶颈如果缓存中存放了大量的查询结果,那么缓存失效操作时整个系统都可能会僵死一会 因为这个操作是靠一个全局锁操作保护的,所有需要做该操作的查询都要等待这个锁,而且无论是检测是否命中缓存、还是缓存失效检测都需要等待这个全局锁。 (3)什么情况下查询缓存能发挥作用理论上,可以通过观察打开或者关闭查询缓存时候的系统效率来决定是否需要开启查询。 对手那些需要消耗大量资源的查询通常都是非常适合缓存的。例如一些汇总计算查询具体的如 COUNT()等。总地来说,对于复杂的 SELECT语句都可以使用查询缓存,例如多表JOIN后还需要做排序和分页,这类查询每次执行消耗都很大,但是返回的结果集却很小,非常适合查询缓存。 不过需要注意的是,涉及的表上 UPDATE、 DELETE和 INSERT操作相比 SELECT来说要非常少才行。 判断查询缓存是否有效的直接数据是命中率。就是使用查询缓存返回结果占总查询的比率 不过缓存中率是一个很难判断的数值。命中率多大才是好的命中率。具体情况,具体分析。 只要查询缓存带来的效率提升大于查询缓存带来的额外消耗,即使30%命中率对系统性能提升也有很大好处。另外,缓存了哪些查询也很重要,例如,被缓存的查询本身消耗非常巨大,那么即使缓存命中率非常低,也仍然会对系统性能提升有好处 缓存未命中可能有如下几种原因: 1.查询语句无法被缓存,可能是因为查询中包含一个不确定的函数(如 CURREN_DATE)或者查询结果太大而无法缓存。这都会导致状态值 Cache not cached增加。2.MySQL从未处理这个查询,所以结果也从不曾被缓存过。 3.还有一种情况是虽然之前缓存了查询结果,但是由于查询缓存的内存用完了,MySQL需要将某些缓存“逐出”,或者由于数据表被修改导致缓存失效。 如果你的服务器上有大量缓存未命中,但是实际上绝大数查询都被缓存了,那么一定是有如下情况发生: 1.查询缓存还没有完成预热。也就是说, MySQL还没有机会将查询结果都缓存起来。2.查询语句之前从未执行过。如果你的应用程序不会重复执行一条查询语句,那么即使完成预热仍然会有很多缓存未命中3.缓存失效操作太多了。 (4)如何配置 和维护查询缓存 query_cache_type 是否打开查询缓存。可以设置成0FN或 DEMAND。 DEMAND表示只有在查询语句中明确写明SQL_ CACHE的语句才放入查询缓存。这个变量可以是会话级别的也可以是全局级别的 query_cache_size 查询缓存使用的总内存空间,单位是字节。这个值必须是1024的整数倍,否则 MySQL实际分配的数据会和你指定的略有不同。 query_cahce_min_res_unit 在查询缓存中分配内存块时的最小单位。 query_chache_limit MySQL能够缓存的最大査询结果。如果查询结果大于这个值,则不会被缓存。因为査询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,才知道查询结果是否超出限制 如果超出, MySQL则增加状态值 Cache_not_cached,并将结果从查询缓存中删除如果你事先知道有很多这样的情况发生,那么建议在查询语句中加入 (5)替代方案 MySQL查询缓存工作的原则是:执行查询最快的方式就是不去执行,但是查询仍然需要发送到服务器端,服务器也还需要做一点点工作。如果对于某些查询完全不需要与服务器通信效果会如何呢?这时客户端的缓存可以很大程度上帮你分担 MySQL服务器的压力 总结: 完全相同的查询在重复执行的时候,查询缓存可以立即返回结果,而无须在数据库中重新执行一次。根据我们的经验,在高并发压力环境中在询缓存会导致系统性能的下降,甚至僵死。 如果一定要使用查询缓存,那么不要设置太大内存,而且只有在确收益的时候才使用。 那该如何判断是否应该使用查询缓存呢?建议使Percona server.,观察更细致的日志,并做一些简单的计算。还可以查看缓存命中率(并不总是有用)、“ NSERTS和 SELECT比率”(这个参数也并不直观)、或者“命中和写入比率”(这个参考意义较大)。 查询缓存是一个非常方便的缓存,对应用程序完全透明,无须任何额外的编码,但是、如果希望有更高的缓存效率,我们建议使cache 或者其他类似的解决方案。 【相关推荐:MySQL视频教程】 以上就是MySQL执行过程以及查询缓存的详细介绍的详细内容,更多请关注php中文网其它相关文章!
本篇文章主要给大家介绍mysql索引原理,希望对需要的朋友有所帮助!(相关推荐:《mysql教程》) 索引的目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? mysql索引原理 除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。 数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢? 我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。 但如果是1千万的记录呢,分成几段比较好?稍有算法基础的同学会想到搜索树,其平均复杂度是lgN,具有不错的查询性能。但这里我们忽略了一个关键的问题,复杂度模型是基于每次相同的操作成本来考虑的,数据库实现比较复杂,数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右,所以简单的搜索树难以满足复杂的应用场景。 以上就是mysql索引原理是什么?的详细内容,更多请关注php中文网其它相关文章!
本篇文章给大家带来的内容是关于MySQL中EXPLAIN解释命令的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1 EXPLAIN概念 EXPLAIN会向我们提供一些MySQL是执行sql的信息: EXPLAIN可以解释说明 SELECT, DELETE, INSERT, REPLACE, and UPDATE 等语句. 当EXPLAIN与可解释的语句一起使用时,mysql会显示一些来自于优化器的关于sql执行计划的信息。即mysql解释它是如何处理这些语句的,和表之间是如何连接的。想获取更多关于EXPLAIN如何获取执行计划信息的。 当EXPLAIN后面是一个会话的connection_id 而不是一个可执行的语句时,它会展示会话的信息。 对于SELECT语句,EXPLAIN会产生额外的执行计划信息,这些信息可以用SHOW WARNINGS显示出来。 EXPLAIN对于检查设计分区表的查询时非常有用。 FORMAT选项可以用于选择输出格式,如果没有配置FORMAT选项,默认已表格形式输出。JSON 选项让信息已json格式展示。 2 EXPLAIN 输出列信息 EXPLAIN输出的字段信息第一列:列名, 第二列:FORMAT = JSON时输出中显示的等效属性名称 ,第三列:字段含义 Column JSON Name Meaning id select_id select标识号 select_type None select类型 table table_name 这一行数据是关于哪张表的 partitions partitions 匹配的分区,对于未分区表,该值为空 type access_type 使用的连接类别,有无使用索引 possible_keys possible_keys MySQL能使用哪个索引在该表中找到行 key key MySQL实际决定使用的键(索引) key_len key_length MySQL决定使用的键长度。如果键是NULL,长度为NULL ref ref 与索引关联的列 rows rows mysql认为执行sql时必须被校验的行数 filtered filtered 表示此查询条件所过滤的数据的百分比 Extra None 附加信息 2.1 id SELECT标识符。SELECT在查询中的序列号,可以为空。 2.2 select_type SELECT类型,所有类型在下表中展示,JSON格式的EXPLAIN将SELECT类型公开为query_block的属性,除非它是SIMPLE或PRIMARY。 JSON名称(不适用为None)也显示在表中。 select_type Value JSON Name Meaning SIMPLE None 简单SELECT(不使用UNION或子查询等) PRIMARY None 嵌套查询时最外层的查询 UNION None UNION中的第二个或后面的SELECT语句 DEPENDENT UNION dependent (true) UNION中的第二个或以后的SELECT语句,取决于外部查询 UNION RESULT union_result UNION的结果 SUBQUERY None 子查询中的第一个选择 DEPENDENT SUBQUERY dependent (true) 子查询中的第一个选择,取决于外部查询 DERIVED None 派生表(子查询中产生的临时表) MATERIALIZED materialized_from_subquery 物化子查询 UNCACHEABLE SUBQUERY cacheable (false) 无法缓存结果的子查询,必须对外部查询的每一行进行重新计算 UNCACHEABLE UNION cacheable...
本篇文章主要给大家介绍在mysql中如何解码base64编码的字符串,那么我们可以通过FROM_BASE64()函数来实现解码。 在MySQL中,FROM_BASE64()函数解码一个base-64编码的字符串并返回结果。更具体地说,它接受一个用TO_BASE64()使用的base-64编码规则编码的字符串,并以二进制字符串的形式返回解码后的结果。 FROM_BASE64()语法如下: FROM_BASE64(str) 其中参数str是你希望解码的以base-64编码的字符串。 例1 -基本用法 下面是一个例子来演示基本用法: SELECT FROM_BASE64('Q2F0'); 结果: +---------------------+ | FROM_BASE64('Q2F0') | +---------------------+ | Cat | +---------------------+ 在这个例子中,我们的参数是Q2F0,它是Cat的base-64编码字符串。 我们可以通过将Cat传递给TO_BASE64()函数得到base-64编码的字符串: SELECT TO_BASE64('Cat'); 结果: +------------------+ | TO_BASE64('Cat') | +------------------+ | Q2F0 | +------------------+ 例2 -一个较长的字符串 下面是一个使用更长的字符串的例子: SELECT FROM_BASE64('TXkgY2F0IGxpa2VzIHRvIGNoYXNlIGVsZXBoYW50cyE='); 结果: +-------------------------------------------------------------+ | FROM_BASE64('TXkgY2F0IGxpa2VzIHRvIGNoYXNlIGVsZXBoYW50cyE=') | +-------------------------------------------------------------+ | My cat likes to chase elephants! | +-------------------------------------------------------------+ 例3 -无效参数 如果参数不是有效的base-64字符串,则返回NULL: SELECT FROM_BASE64('Oops!'); 结果: +----------------------+ | FROM_BASE64('Oops!') | +----------------------+ | NULL | +----------------------+ 例4 -NULL参数 如果你传入NULL,你也会得到NULL: SELECT FROM_BASE64(NULL); 结果: +-------------------+ | FROM_BASE64(NULL) | +-------------------+ | NULL | +-------------------+ 例5 -缺少参数 如果你不传递一个参数,你会得到一个错误: SELECT FROM_BASE64(); 结果: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'FROM_BASE64' 例6 -参数太多 如果你传入太多的参数,你也会得到一个错误: SELECT FROM_BASE64('Q2F0', 'RWxlcGhhbnQ='); 结果: ERROR 1582 (42000): Incorrect parameter count in the call to...
如何调试Shell脚本?我们可以在shell脚本中使用“set-xv”命令或在执行脚本时在命令行上使用-xv来调试shell脚本。 通过添加命令来调试Shell脚本: $ cat checkdebug.sh #!/bin/bash set -xv #<< This will enable debugcd /var/log/ for i in "*.log"; do du -sh $i done 执行上面的脚本并观察输出: #sh checkdebug.sh 输出: cd /var/log/ + cd /var/log/ for i in "*.log"; do du -sh $i done + for i in '"*.log"' + du -sh boot.log mysqld.log post111.log post1121.log yum.log 0 boot.log 32K mysqld.log 0 post111.log 0 post1121.log 4.0K yum.log 使用选项调试shell脚本: 使用这个选项,我们不需要在shell脚本中添加“set-xv”。只需创建一个shell脚本,如下所示。 $ cat checkdebug2.sh #!/bin/bash cd /var/log/ for i in "*.log"; do du -sh $i done 执行如下 # sh -xv checkdebug2.sh 输出: #!/bin/bash cd /var/log/ + cd /var/log/ for i in "*.log"; do du -sh $i done + for i in '"*.log"' + du -sh boot.log mysqld.log post111.log post1121.log yum.log 0 boot.log 32K mysqld.log 0...
Linux中文乱码的解决方法:比如当log4j乱码时我们可以通过找到配置文件在里面设置字符编码为utf-8来,若linux未安装中文语言包可以安装中文语言包解决问题 经常会遇到很多Linux下的中文乱码问题,今天将为大家分享一些常见的解决方法,具有一定的参考价值,希望对大家有所帮助 【推荐课程:Linux教程】 mysql中文乱码 vi /etc/my.cnf 在mysqld下添加 [mysqld] character-set-server=utf8 tomcat中文乱码 找到tomcat/conf/sever.xml 在下面的标签中插入URIEncoding=”UTF-8” <Connector port="9999" URIEncoding="UTF-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> log4j乱码 使用的配置文件,在配置文件中插入 log4j.appender.A1.Encoding=UTF-8 Linux无中文语言包 查看当前语言 locale 安装简体中文 yum install kde-l10n-Chinese 修改配置文件etc/locale.conf LANG="zh_CN.UTF-8" 另外提一句,时区默认不是中国,这里吃过亏,所以修改时区为亚洲上海 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。
如果您有服务器咨询问题、购买问题、可以联系我们客服 7271895 690624 商祺云-阿里代理、景安代理、西部代理 1、nethogs1)NetHogs是一款开源、免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量。NetHogs只能实时监控进程的网络带宽占用情况。NetHogs支持IPv4和IPv6协议,支持本地网卡以及PPP链接2)debian下安装apt-get install nethogscentos下安装yum install nethogs3)使用命令nethogs,实时查看流量数据查看各个进程对应的功能节点,来监控网络流量数据消耗的量4)NetHogs提供交互式控制指令:m : Cycle between display modes (kb/s, kb, b, mb) 切换网速显示单位r : Sort by received. 按接收流量排序s : Sort by sent. 按发送流量排序q : Quit and&nb 1. linux下的几个网络流量监控工具使用的图文教程 简介:1、nethogs1)NetHogs是一款开源、免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量。NetHogs只能实时监控进程的网络带宽占用情况。NetHogs支持IPv4和IPv6协议,支持本地网卡以及PPP链接2)debian下安装apt-get install nethogscentos下安装yum install nethogs 2. Java虚拟机学习 – JDK可视化监控工具 简介:JConsole工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定。双击其中一个jvm进程即可开始监控,也可使用“远程进程”来连接远程服务器。 3. php中memcache的使用 及 windows 中的memcache监控工具 简介:php中memcache的使用 及 windows 中的memcache监控工具 4. PHP 网站开发中网站性能分析 简介:PHP 开发中的外围资源性能分析 首先,后端外围资源,是指跟 PHP 运行过程中与语言本身无关的网络与 IO 操作、存储服务、中间件代理、缓存和数据库访问等,在本文中,我们先分析 IO 操作和中间件服务。 为什么外围资源的性能分析,要以以上三者分析为主?我们可以看如下国内专业的性能监控工具 OneAPM 的 PHP Web 应用后台截取下来的总览图,通过这个图可以看到,数据 5. PHP 开发中的外围资源性能优化分析 简介:首先,后端外围资源,是指跟 PHP 运行过程中与语言本身无关的网络与 IO 操作、存储服务、中间件代理、缓存和数据库访问等,在本文中,我们先分析 IO 操作和中间件服务。 为什么外围资源的性能分析,要以以上三者分析为主?我们可以看如下国内专业的性能监控工具 OneAPM 的 PHP Web 应用后台截取下来的总览图,通过这个图可以看到,数据库所花费的时间在总 PHP 响应时间 6. MemAdmin 基于 PHP5 & JQuery 的 Memcached 治理监控工具 简介:MemAdmin 基于 PHP5 & JQuery 的 Memcached 管理监控工具 MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。 主要功能: 服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新 服务器性能监控:GET、DELETE、I 7. MemAdmin 基于 PHP5 & JQuery 的 Memcached 治理监控工具 简介:MemAdmin...
如果您有服务器咨询问题、购买问题、可以联系我们客服 7271895 690624 商祺云-阿里代理、景安代理、西部代理 Linux下查看Nginx等的并发连接数和连接状态。 1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’或者:netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”t”,state[key]}’返回结果一般如下: LAST_ACK 5 (正在等待处理的请求数) SYN_RECV 30 ESTABLIS 1. 关于Linux下如何查看Nginx的并发连接数和连接状态的详细介绍 简介:Linux下查看Nginx等的并发连接数和连接状态。1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:netstat -n | awk & 39; 2. php 计划任务 检测用户连接状态 简介:php 计划任务 检测用户连接状态 3. 查看apache并发请求数及其TCP连接状态 简介:这两天搭建了一组Apache服务器,每台服务器4G内存,采用的是prefork模式,一开始设置的连接数太少了,需要较长的时间去响应用户的请求,后来修改了一下Apache 2.0.59的配置文件httpd.conf: 4. php三种连接状态的处理 简介:PHP特点之三种连接状态的处理——normal、aborted、timeout 5. Centos65查看nginx并发连接数和TCP连接状态命令 简介::本篇文章主要介绍了Centos65查看nginx并发连接数和TCP连接状态命令,对于PHP教程有兴趣的同学可以参考一下。 6. linux计划任务 php 计划任务 检测用户连接状态 简介:linux计划任务:linux计划任务 php 计划任务 检测用户连接状态:计划任务 复制代码 代码如下:ignore_user_abort(); // 用户关闭浏览器程序依然执行 set_time_limit(0); // 不限制程序运行时间 $interval = 3; // 程序循环间隔时间秒 $link = mysql_connect(‘localhost’, ‘username’, ‘paswd’); mysql_select_db(‘test’); mysql 【相关问答推荐】: 如何在Linux中定时发送网络请求? php – java如何实现html的实时采集,给个思路。谢了! Java 判断socket的连接状态 PHP & Memcached 连接状态 node.js – node连接mysql 超时的问题 以上就是总结连接状态的详细介绍的详细内容,更多请关注学派吧其它相关文章!
如果您有服务器咨询问题、购买问题、可以联系我们客服 7271895 690624 商祺云-阿里代理、景安代理、西部代理 一、/etc/hosts>man hosts1、作用: 主机名查询静态表;主要用于IP地址与计算机主机名之间的转换。/etc/hosts文件格式,每行表示一个IP地址;每行由三部分构成:IP_address canonical_hostname [aliases…….]IP地址 &nbs 1. linux系统服务(一)之/etc/host* 的文件说明详解 简介:上述孤立节点就是说:建立没有连接的internet的局域网中,可以使用/etc/hosts指定需要连接的主机名与IP的映射,不在/etc/hosts映射之中的,一般无法连接。 2. python读写json文件说明 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。 3. Nginx服务器nginxconf的配置文件说明 简介::本篇文章主要介绍了Nginx服务器nginxconf的配置文件说明,对于PHP教程有兴趣的同学可以参考一下。 4. 12306 验证码 php 数学运算验证码实现代码 简介:12306 验证码:12306 验证码 php 数学运算验证码实现代码:复制代码 代码如下:<?php //————————————- // 文件说明:数学运算验证码 // 文件作者:Jesse Lee // 最后更新:2008-09-07 //————————————- session_start(); $sessionvar = ‘vdcode’; //Sessi 5. PHP框架 php框架Phpbean说明 简介:PHP框架:PHP框架 php框架Phpbean说明:Phpbean的核心文件很少,这和phpbean的设计思想(强调性能和分工合作开发)是非常相关的。Phpbean的核心仅仅只是实现基本的MVC框架,不提供任何多余的代码,对程序员是非常透明的。 Phpbean的核心文件说明如下(注意,核心文件大都可以单独使用): 1、 action.php action的基类。任何其他的action都必须是它的子类。里面之实现一个功能:对URL数据的处理。 2、 6. php 数学运算验证码实现代码_PHP教程 简介:php 数学运算验证码实现代码。复制代码 代码如下: ?php //————————————- // 文件说明:数学运算验证码 // 文件作者:Jesse Lee // 最后更新:2008-09-07 //——— 7. 解析php session_set_save_handler 函数的用法(mysql)_PHP教程 简介:解析php session_set_save_handler 函数的用法(mysql)。复制代码 代码如下: ?php /*============================文件说明======================================== @filename: session.class.php @description: 数据库保存在线用 8. nusoap wsdl 文件说明。解决办法 简介:nusoap wsdl 文件说明。。我的服务器创建如下: App::import(‘Vendor’, ‘nusoap/lib/nusoap’); $server = new soap_server; $server->configureWSDL(‘sum’);$server->register(‘sum’,array 9. PHP中 验证码没法在调用页面正常显示 简介:PHP中 验证码无法在调用页面正常显示 第一:页面文件说明部分: 1、调用页面的路径htmlproblems.php 2、验证码页面的路径 htmlinccode.php ? 第二:code.php 页面代码 如下图 ? 第三:problems.php页面代码 如下图 ?...
这篇文章主要为大家详细介绍了Linux学习第三篇,Centos7安装mysql5.7.16数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 如果您有服务器咨询问题、购买问题、可以联系我们客服 7271895 690624 商祺云-阿里代理、景安代理、西部代理 前言:在linux下安装mysql不如windows下面那么简单,但是也不是很难。本文向大家讲解了如何在Centos7下如何安装mysql5.7版本,如果有什么问题和错误的地方,欢迎大家指出。 版本:mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar 注释:在安装前需要确定现在这个系统有没有mysql,如果有那么必须卸载(在centos7自带的是mariaDb数据库,所以第一步是卸载数据库) 查看mysql数据库: rpm -qa | grep -i mysql 卸载mysql数据库: rpm -e [mysql文件名] 如果有关联文件,不能直接卸载。可以用一下命令强制卸载 rpm -e --nodeps [mysql文件名] 一、将mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar复制到/home/(在linux下面安装软件,一般都需要将文件拷贝到home目录下) cp mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar /home/ 二、解压文件 tar -xvf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar 下面是解压出的所有rpm文件 三、解压并安装rpm文件 1.一般只需要安装下面几个文件 2.接下来就用命令一个个的解压rpm文件并安装即可 注:这里有一个细节需要大家注意,上面的文件在安装中也是有顺序的,他有对应的优先级。所以你需要按照下面的顺序来一个个的解压安装 mysql-community-common-5.7.16-1.el7.x86_64 mysql-community-libs-5.7.16-1.el7.x86_64 mysql-community-client-5.7.16-1.el7.x86_64 mysql-community-server-5.7.16-1.el7.x86_64 mysql-community-devel-5.7.16-1.el7.x86_64 四、安装成功后,开启mysql服务 systemctl start mysqld.service 五、查看3306端口是否开启 netstat -ln | grep 3306 六、修改my.cnf配置文件 1.这一步需要找到my.cnf文件。my.cnf文件的默认路径为/etc/my.cnf 2.编辑my.cnf vim /etc/my.cnf 3.按’i’,进入插入模式后,插入以下代码 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid validate_password=off default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci 注:validate_password=off的意思是关闭密码验证插件(这一句必须加上,因为在修改密码的时候如果不加上会非常的麻烦)。 4.保存并退出(按’esc’后,在输入’:wq’) 5重启mysql服务 systemctl restart mysqld.service 七、到了这一步的尤为的重要了,前面的每一步都必须仔细的检测,并且要成功的执行才可以。 1.初始化表 /user/sbin/mysqld --initialize --user=mysql 2.初始化后,会产生一个mysql的零时登录密码,那么在哪里查看呢?前面在my.cnf文件中配置的日志路径是log-error=/var/log/mysqld.log,查看此路径下面的mysqld.log日志,并且找到零时密码 cat /var/log/mysqld.log |grep password 3.根据零时密码来重新修改mysql数据库的密码 mysql_secure_installation 4.回车后,他会叫你输入密码,这是你只需要输入零时密码即可。 5.输入正确回车后就就输入新密码即可,然后在确认。 八、密码修改成功后便可以登录mysql了 以上就是Linux学习第三篇之Centos7安装mysql5.7.16数据库的详细介绍的详细内容,更多请关注学派吧其它相关文章!