mysql函数

技术译文 | MySQL 8.0.19 GA!

自作多情 提交于 2020-02-26 09:41:59
作者:Geir Hoydalsvik 翻译:管长龙 原文: https://mysqlserverteam.com/the-mysql-8-0-19-maintenance-release-is-generally-available/ MySQL 开发团队非常高兴地宣布,MySQL 8.0.19 现在可从 dev.mysql.com 下载。除了 bug 修复,此版本中还添加了一些新功能。 以下是重点介绍! InnoDB ReplicaSet 继 InnoDB Cluster 作为我们基于组复制的第一个完全集成的 MySQL HA 解决方案之后,InnoDB ReplicaSet 提供了另一个完整的解决方案(基于MySQL 复制)。 InnoDB ReplicaSet 的基本思想是对经典 MySQL 复制执行与 InnoDB Cluster 对组复制所做的相同操作。我们采用了一种非常强大但可能很复杂的技术,在 MySQL Shell 中为其提供了易于使用的 AdminAPI。 仅需几个易于使用的 Shell 命令,即可从头开始配置 MySQL 复制数据库体系结构,包括使用 CLONE 进行数据供应,设置复制并执行手动切换或故障切换。MySQL Router 了解拓扑结构,并会自动进行负载平衡或流量重定向。 Router 在路由中添加对 InnoDB ReplicaSet 的支持

mysql 执行流程解析

不问归期 提交于 2020-02-26 07:44:55
MySQL 可以分为 Server 层和存储引擎层两部分 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等 而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、 MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB 我们来看一下sql的执行流程 连接器 第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端 建立连接、获取权限、维持和管理连接 连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时 建立连接的过程通常是比较复杂的,所以在使用中要尽量减少建立连接的动作,也就是尽量使用长连接 但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因 为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断 开的时候才释放 怎么解决这个问题呢?你可以考虑以下两种方案。 定期断开长连接。使用一段时间

Mysql中字符串截取函数

别说谁变了你拦得住时间么 提交于 2020-02-26 02:27:10
MySQL中字符串的截取 substring_index(str,delim,count) 函数的使用较为普遍 函数括号里面的依次为:要分隔截取的字符串(如:”aaa_bbb ccc”)、分隔符(如:“ ”)、位置(表示第几个分隔符处,如:“1”)。 count为正数,那么就是从左边开始数,函数返回第count个分隔符的左侧的字符串; count为负数,那么就是从右边开始数,函数返回第count个分隔符右边的所有内容; count可以为0,返回为空。 例子:substring_index(“aaa_bbb ccc”,” ”,1) ,返回为 aaa; substring_index(“aaa_bbb ccc”,” ”,2) ,返回为 aaa_bbb; substring_index(substring_index(“aaa_bbb ccc”,” ”,-2),”_”,1) ,返回为 bbb; concat是连接几个字符串 例子:concat(‘m’,’y’,’s’,’q’,’l’); 返回:mysql LOCATE(substr,str) select LOCATE(‘bar’, ‘foobarbar’); 返回4,即bar在字符串中的索引位置。 依据表中的某个字段查询包含有这个字符的所有数据 find_in_set:SELECT FROM user WHERE find_in_set

Mysql存储过程

℡╲_俬逩灬. 提交于 2020-02-26 01:06:59
一、什么是mysql存储过程? 是在数据库系统中,一组为了完成特定功能SQL语句集,经编译后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 存储过程是经过编译的SQL语句集。编译后节省很多性能。 二、为什么使用存储过程? 1、存储过程只在创造时进行编译,以后每次执行存储过程都不需要再重新编译,而一般SQL语句每执行一次就编译一次,所以存储过程可以提高数据库执行速度 2、当对数据库进行复杂操作时(如对多个表进行UPDATE,INSERT,QUERY,DELETE时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用,这些操作如果用程序来完成,就变成一条条的SQL语句,可能要多次链接数据库,而换成存储过程,只需要链接一次数据库就可以了 3、存储过程可以重复使用,可以减少数据库开发人员的工作量 4、安全性高,可设定只有某些用户才具有对指定存储过程的使用权 三、存储过程的缺点 1、可移植性差 2、对于简单的SQL语句,存储过程没什么优势 3、存储过程中不一定会减少网络传输 4、如果一个用户使用数据库,那么存储过程对安全也没什么影响 5、团队开发时需要统一标准,否则后期维护起来麻烦 6、在大并发访问量的情况下,不宜写过多涉及运算的存储过程 7、业务逻辑复杂时,特别是涉及到对很大的表进行操作的时候,不如在前端先简化业务逻辑 四

MYSQL查询--聚合函数查询

半城伤御伤魂 提交于 2020-02-26 01:02:39
聚合函数查询 聚合函数的最大特点是它们根据一组数据求出一个值。聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略。 COUNT()函数 COUNT()函数,对于除“*”以外的任何参数,返回所选择集合中非NULL值的行的数目;对于参数“*”,返回选择集合中所有行的数目,包含NULL值的行。没有WHERE子句的COUNT(*)是经过内部优化的,能够快速的返回表中所有的记录总数。 例子: select COUNT(*) from info; 查询结果: SUM()函数 SUM()函数可以求出表中某个字段取值的总和。 例子: select SUM(score) from info; 查询结果: AVG()函数 AVG()函数可以求出表中某个字段取值的平均值。 例子: select avg(score) from info; 查询结果: MAX()函数 MAX()函数可以求出表中某个字段取值的最大值。 例子: select max(score) from info; 查询结果: MIN()函数 MIN()函数可以求出表中某个字段取值的最小值。 例子: select min(score) from info; 查询结果: 来源: 51CTO 作者: 低调的男孩 链接: https://blog.51cto.com/13760351/2472352

sql执行过程

拈花ヽ惹草 提交于 2020-02-25 11:42:51
作为一个程序员,几乎所有人都使用过 SQL 语言,无论是在命令行执行、程序调用,还是在 SQL 工具里,你都做过这样的事:写一个规范的 SQL 语句,然后等待数据库返回的结果,然后再基于结果做各种逻辑处理。但是,你知道这条 SQL 语句是咋执行的吗?我打赌你并不是很清楚,读完全文,你会有完全不同的感受。 我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。 今天我们就把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,让你对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问题时,就能够直击本质,更为快速地定位并解决问题。 下面我给出的是MySQL的基本架构示意图,从中你可以清楚地看到SQL语句在MySQL的各个功能模块中的执行过程。 MySQL的逻辑架构图 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层包括连接器、查询缓存、分析器

MySQL基础架构

回眸只為那壹抹淺笑 提交于 2020-02-25 11:41:00
前段时间订阅了《Mysql实战45讲》(从原理到实战),新的一年为自己充充电。对于这部分内容,我所知道的只来源于我大学里学习的课程《数据库原理》,在大学里学习的只是简单的查询,增加,删除,索引,锁,触发器,视图等内容。几乎没有基础的架构知识。因此在这里巩固一下原理,学习一下数据库Mysql在原理上究竟是怎样的。 首先我们一起看一个Mysql的基本架构示意图: 1、Mysql可以分为Server层和存储引擎层两部分。 2、Server层:包含连接器,查询缓存,分析器,优化器,执行器等,涵盖了MySQL的大多数核心功能区以及所有的内置函数。 ①内置函数:日期,时间,数学和加密函数等; ②所有跨存储引擎的功能都在这一层实现,例如存储过程,触发器,视图等; 3、存储引擎层:负责数据的存储和提取。 ①架构模式:插件式的,支持InnoDB(目前也是最常用的,MySQL5.5后默认存储引擎)、MyISAM、Memory等多个存储引擎。 ②create table 时不指定引擎类型,默认使用的就是InnoDB.如果使用其他类型,可以利用create table语句中使用engine=memory,等来指定使用内存引擎来创建表。不同的存储引擎数据存储方式不同,支持的功能也不同。 4、不同的存储引擎共用一个server层,结合一个例子我们从总体上了解一下各部件的功能。 mysql> select *

MySQL 启动原理剖析

一个人想着一个人 提交于 2020-02-24 09:02:43
/*--> */ /*--> */ 介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容多为概念知识;理解MySQL的启动原理对熟悉MySQL至关重要,启动mysql服务有三种方式分别是:mysql.sever,mysqld,mysqld_safe。 my.cnf [client] socket=/tmp/mysql.sock port=3306 [mysqld] #################[base]########################## basedir =/usr/local/mysql datadir =/data/mysql/ innodb_data_home_dir=/data/mysql/ innodb_log_group_home_dir=/data/mysql/ port =3306 user=mysql pid-file=/data/mysql/mysql.pid socket =/tmp/mysql.sock default_storage_engine=innodb character_set_server=utf8 open_files_limit=65535 [mysqld_safe] log_error=/usr/local/mysql/log/mysql-error.log pid-file=

php中的extract函数

纵饮孤独 提交于 2020-02-24 05:07:26
extract函数用来将一个数字分解成多个变量直接使用,下面是W3C的解释:PHP extract() 函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。本函数返回成功设置的变量数目。 下面表格是参数说明: 语法 extract(array,extract_rules,prefix) 参数 描述 array 必需。规定要使用的输入。 extract_rules 可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。 对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一: 可能的值: EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。 EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素) EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。 EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。 EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP

MySQL:select command denied to user for table \'proc\'案例

丶灬走出姿态 提交于 2020-02-23 13:42:13
使用EMS MySQL Manager Pro(3.4.0.1)连接MySQL 5.6.20时,报错: “ SELECT command denied to user xxx@xxx.xxx.xxx.xxx for table 'proc' 很是纳闷,后面使用同样的权限,发现使用命令工具mysql -h xxxx -u username -p连接时不会报错。个人猜测是因为EMS MySQL Manager(3.4.0.1)连接数据库时,会去查询mysql.proc表获取相关的对象(存储过程、函数等)。于是在测试服务器开启了MySQL查询日志,然后在客户端电脑使用EMS MySQL Manager Pro连接到数据库(Connect to Database),然后检查查询日志具体信息,发现如下所示,EMS MySQL Manager连接数据库时确实会去查询mysql.proc, 而因为权限问题,所以报如上错误: #tail -60f /var/lib/mysql/mytestlnx02.log /usr/sbin/mysqld, Version: 5.6.41 (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock Time Id