
mysql
文章平均质量分 78
刘翔UP
生活中的20%是由发生在你身上的事情组成,
而另外的80%则是由你对所发生的事情如何反应所决定。
懂得接受,懂得控制情绪,调整心态的人,才能拥有更多的幸福。
只有消化了坏情绪,才能痛痛快快地拥抱好运气。
只有把握好情绪,我们才能更好地把握人生。
加油
展开
-
mybaits 简单写法
1,查询出的结果可能有好多条记录,返回类型即是list。但resultType还是写成resultType="user"(user为集合list中的实体类),而不是写成resultType="java.util.List"1批量查询批量插入批量删除原创 2020-11-02 21:50:04 · 162 阅读 · 0 评论 -
Mybatis 缓存原理及失效情况解析
1、什么是缓存[Cache]存在内存中的临时数据。 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2、为什么要使用缓存减少和数据库的交互次数,减少系统开销,提高系统效率。3、什么样的数据需要使用缓存经常查询且不易改变的数据4、Mybatis缓存MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 MyBatis系统转载 2020-09-25 10:33:05 · 279 阅读 · 0 评论 -
MySQL InnoDB MVCC机制吐血总结
原文:https://www.jianshu.com/p/d67f0329d3bf谈到MySQL事务,必然离不开InnoDB和MVCC机制,同时,MVCC也是数据库面试中的杀手问题,写这篇总结的目的,就是为了让自己加深映像,这样面试就不会忘记了。在搜索时发现关于MVCC的文章真的是参差不齐(老子真的是零零散散看了三个月都迷迷糊糊),所以这里集合了各家所言之后进行了自我总结,苦苦研究了许久,才得到的比较清晰的认知,这可能也是我目前最有深度的一篇博客了把,希望对我和看到的人都有所帮助,哈哈。MVCC:转载 2020-09-10 10:35:20 · 300 阅读 · 3 评论 -
Mysql默认的事务隔离级别是可重复读(Repeatable Read),那互联网项目中Mysql也是用默认隔离级别,不做修改么?
开始我们的内容,相信大家一定遇到过下面的一个面试场景面试官:“讲讲mysql有几个事务隔离级别?”你:“读未提交,读已提交,可重复读,串行化四个!默认是可重复读”面试官:“为什么mysql选可重复读作为默认的隔离级别?”(你面露苦色,不知如何回答!)面试官:"你们项目中选了哪个隔离级别?为什么?"你:“当然是默认的可重复读,至于原因。。呃。。。”(然后你就可以回去等通知了!)为了避免上述尴尬的场景,请继续往下阅读!Mysql默认的事务隔离级别是可重复读(Repeatable Rea转载 2020-08-24 18:52:53 · 822 阅读 · 0 评论 -
mysql 5.7配置项最详细的解释
[client]#password=88888888socket=/data/var/mysql/mysql.sock[mysqld_safe]pid-file=/data/var/mysql/mysqld.pidlog-error = /data/local/mysql-5.7.19/log/mysql-error.log[mysql]socket=/data/var/mysql/mysql.sock[mysqld]user = mysqlport = 31306datadi.转载 2020-08-24 11:09:06 · 291 阅读 · 0 评论 -
MySQL中怎么对varchar类型排序问题(数字字符串和汉字拼音的顺序)
在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同学介绍varchar类型排序问题如何解决。今天在对国家电话号码表进行排序的时候发现了一个有趣的问题,我想让isdcode字段按照由小到大的顺序排序,于是乎我是这样写的代码如下 复制代码 SELECT * FROM gb_country_isdcode ORDER BY isdcode asc 结果如下,发现竟然不是我想要的结果,asc排序...转载 2020-08-18 17:28:39 · 740 阅读 · 0 评论 -
MySQL锁总结
锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是Mysql在服务器层和存储引擎层的的并发控制。加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否是否已解除、释放锁等。锁机制共享锁与排他锁共享锁(读锁):其他事务可以读,但不能写。 排他锁(写锁) :其他事务不能读取,也不能写。粒度锁MySQL 不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现了锁机制,服务器层完全不了解存储引转载 2020-07-24 17:29:04 · 105 阅读 · 1 评论 -
Mysql数据库使用规范
Mysql数据库使用规范1. 命名规范1.1、命名总规则所有名称的字符范围为:A-Z, a-z, 0-9 和_(下划线),禁止许使用其他字符作为名称; 采用英文单词或英文短语(包括缩写)作为名称,禁止使用无意义的字符或汉语拼音; 名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则; 禁止使用mysql系统保留字作为表名、库名、字段名、函数名、过程名(mysql保留字列表参考Mysql数据库系统保留字列表);1.2、数据库命名规范数据库名格式统一由前缀"tset原创 2020-07-10 17:36:51 · 637 阅读 · 0 评论 -
MySql中varchar(10)和varchar(100)的区别
MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【勘误:varchar在实际存储的时候会多一个byte用来存放长度】。但是深入一下,设计数据库的时候,二者一样吗?答案是否定的【至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度】【二者在内存中的操作方式也是不同的,下面的例子中有体现】如现在用户需要存储一个地址信息。根据评转载 2020-07-10 11:38:59 · 487 阅读 · 0 评论 -
redo log的三层架构,MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失
有个星球水友提问:沈老师,我们有一次MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,想问下什么情况下可能导致“事务已经提交,数据却丢失”呢?这个问题有点复杂,且容我系统性梳理下思路,先从redo log说起吧。画外音:水友问的是MySQL,支持事务的是InnoDB,本文以InnoDB为例展开叙述,其他数据库不是很了解,但估计原理是相同的。为什么要有redo log?事务提交后,必须将事务对数据页的修改刷(fsync)到磁盘上,才..转载 2020-07-08 14:24:06 · 785 阅读 · 0 评论 -
MySQL-nnoDB写缓冲(change buffer)
简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(buffer pool)以页为单位,缓存最热的数据页(data page)与索引页(index page);(3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;画外音:细节详见《缓冲池(buffer pool),彻底懂了!》。毫无疑问,对于读请求,缓冲池能够减少磁盘IO,提升性能。问题来了,那写请求呢?情况一假如要修改页号为4的索引页,而这个页正..转载 2020-07-08 11:33:51 · 198 阅读 · 0 评论 -
MySQL采用buffer机制 double write buffer
MySQL采用buffer机制,避免每次读写进行磁盘IO,提升效率: 《缓冲池(buffer pool)》 《写缓冲(change buffer)》 《日志缓冲(log buffer)》MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。如上图所示,MySQL里page=1的页,物理上对应磁盘上的1+2+3+4四个格。那么,问题来了,这个操作并非原子,如果...转载 2020-07-08 11:26:50 · 1009 阅读 · 1 评论 -
InnoDB的缓冲池(buffer pool)
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。今天,和大家聊一聊InnoDB的缓冲池。InnoDB的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速...转载 2020-07-08 10:20:01 · 341 阅读 · 0 评论 -
事务的实现-redo log和undo log来完成
事务InnoDB中的事务完全符合ACID特性:原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability)通过在事务中使用SAVE WORK函数可以建立保存点。保存点可以通过ROLLBACK WORK: n来回滚。事务的实现事务的隔离性由上一章讲的锁来实现。原子性、一致性、持久性通过数据库的redo log和undo log来完成。redo log称为重做日志,用来保证事务的原子性和持久性;undo log用来保证事务的转载 2020-07-01 14:56:53 · 526 阅读 · 0 评论 -
InnoDB中的页合并与分裂
如果你找过任何一位MySQL顾问,问他对你的语句和/或数据库设计的建议,我保证他会跟你讲主键设计的重要性。特别是在使用InnoDB引擎的情景,他们肯定会给你解释索引合并和页分裂这些。这两个方面与性能息息相关,你应该在任何设计索引(不止是主键索引)的时候都将他们考虑在内。你可能觉得这些听起来挺莫名其妙,没准你也没错。这不是容易的事,特别是讲到关于内部实现的时候。通常你都不会需要处理这些事情,并且你也不想去着手他们。但是有时候这些问题又是必须搞清楚的。如果有这种情况,那这篇文章正适合你。我尝试用这篇转载 2020-07-01 14:32:05 · 476 阅读 · 0 评论 -
SQL 选用索引的执行成本如何计算
之前提到使用以下 sql 会导致慢查询SELECTCOUNT(*)FROMSomeTableSELECTCOUNT(1)FROMSomeTable原因是会造成全表扫描,有位读者说这种说法是有问题的,实际上针对无 where_clause 的COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,其实反而性能最高,这位读者的说法对不对呢针对这个疑问,我首先去生产上找了一个千万级别的表使用 EXPLAIN 来查询了一下执行计划EXPLAINSE...转载 2020-06-22 15:00:04 · 635 阅读 · 0 评论 -
MySQL的事务对表操作auto_increament没有回滚
在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的计数器记录的当前值是保存在存内存中的,并不是存在于磁盘上,当mysql server处于运行的时候,这个计数值只会随着insert改增长,不会随着delete而减少。而当mysql server启动时,当我们需要去查询auto_increment计数值时,mysql便会自动执行:SELECT MAX转载 2020-06-16 17:36:39 · 286 阅读 · 0 评论 -
数据库查询中 where,group by,having,order by的时候,执行顺序
注意:where肯定在group by 之前。一,group by 字句可以和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选。二,需要注意having和where的用法区别:having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。转载 2020-06-13 14:54:37 · 915 阅读 · 0 评论 -
前缀索引-当索引是很长的字符序列时
当索引是很长的字符序列时,这个索引将会很占内存,而且会很慢,这时候就会用到前缀索引了。所谓的前缀索引就是去索引的前面几个字母作为索引,但是要降低索引的重复率,索引我们还必须要判断前缀索引的重复率。先看这样一张表:mysql> select * from test;+----------+-------+| name | score |+----------+-------+| zhangsan | 123 || wangwu | 345 || zhaoliu | ...转载 2020-06-13 14:42:32 · 186 阅读 · 0 评论 -
为什么你的SQL执行很慢
最近看完了丁奇老师在极客时间的课程,不得不说确实干货满满,然后趁着热乎劲顺手又二刷了《MySQL技术内幕》中的部分内容。但很多东西都是零散的,总觉得需要稍微总结一下。那写点什么呢?就从之前经常被问的两道面试题说起吧。 如果一条SQL语句执行很慢,你觉得有哪些原因? 如果让你给一张表设计索引,你会考虑哪些因素? SQL语句执行很慢原因分析先来回答第一个问题,如果一条SQL语句执行会很慢,会有哪些可能的原因。为了方便说明问题,这里先给出建表语句和初始化语句: CREATE T转载 2020-06-13 14:37:36 · 248 阅读 · 0 评论 -
MySQL 表锁和行锁机制和事务属性关系
MySQL 表锁和行锁机制行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑。遇到了可别乱踩。通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项。还在等啥?经验等你来拿!MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行锁。后者的出现从某种程度上是弥补前者的不足。比如:MyISAM不支持事务,InnoDB支持事务。表锁虽然开销小,锁表快,但高并发下性能低。行锁虽然开销转载 2020-06-13 10:07:50 · 1270 阅读 · 0 评论 -
explain的SQL调优和字段解释
mysql中的explain命令可以用来查看sql语句是否使用了索引,用了什么索引,有没有做全表扫描。可以帮助我们优化查询语句。explain出来的信息有10列,文章主要介绍type、key、Extra这几个字段。演示中涉及到的表结构如下:CREATETABLE`dept_desc`(`dept_no`char(4)NOTNULL,`dept_name`varchar(40)NOTNULL,`desc`varchar(255)NOTNULL,P...转载 2020-06-12 14:20:08 · 187 阅读 · 0 评论 -
MySQL百万级数据量分页查询方法及其优化
方法一:直接使用数据库提供的SQL语句语句样式:MySQL中可用如下方法:select * from table_name limit m, n;适用场景:适用于数据量较少的情况(元组百/千级)原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). limit限制的是从结果集的 m 位置处取出 n 条输出,其余抛弃.方法二:建立主键或唯一索引,利用索引(假设每页10条)语句样式: MySQL中,可用如下方法:s转载 2020-05-09 17:56:26 · 332 阅读 · 0 评论 -
mysql 为啥用b+ 树
mysql 为啥用b+ 树原因就是为了减少磁盘io次数,因为b+树所有最终的子节点都能在叶子节点里找见,所以非叶子节点只需要存`索引范围和指向下一级索引(或者叶子节点)的地址` 就行了,不需要存整行的数据,所以占用空间非常小,直到找到叶子节点才加载进来整行的数据。B树非叶子节点也会存数据,所以不适合mysql(以后研究下mongo为啥用b树 再补充)B+树适合作为数据库的基础结...转载 2020-01-16 17:21:38 · 316 阅读 · 0 评论 -
canal——基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解...转载 2019-08-15 14:13:15 · 364 阅读 · 0 评论 -
canal(基于mysql数据库binlog的增量订阅&消费)
一、背景早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部版本已经支持mysql和oracle部分版本的日志解析,当前的c...转载 2019-08-15 14:11:47 · 1793 阅读 · 0 评论 -
一条sql语句在mysql中是如何执行的
概览最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。一、mysql架构分析下面是mysql的一个简要架构图:mysql主要分为Server层和存储引擎层Server层:主要包括连接器、查询缓存...转载 2019-03-27 15:25:31 · 730 阅读 · 0 评论 -
java.sql.SQLException: Your password has expired. To log in you must change it using a client that s
java.sql.SQLException: Your password has expired.To log in you must change it using a client that supports expired passwords.com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Co转载 2015-12-05 20:30:30 · 7570 阅读 · 0 评论 -
mysql中DATE_FORMAT()和str_to_date()简介
定义和用法DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。语法DATE_FORMAT(date,format)date 参数是合法的日期。format 规定日期/时间的输出格式。可以使用的格式有:格式描述%a缩写星期名%b缩写月名%c月,数值%D带有英文前缀的月中的天转载 2015-10-27 17:11:22 · 679 阅读 · 0 评论 -
MYSQL 创建用户
一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登转载 2015-09-23 17:03:49 · 285 阅读 · 0 评论 -
MYSQL数据插入 乱码问题 default-character-set=latin1改成default-character-set=utf8 在my.ini文件中。需要改动两处
1. 设置Mysql的编码格式(注意是在创建数据库之前就要设置) 找到Mysql安装目录下的 myini文件,用记事本打开,找到以下两句: [mysql] default-character-set=latin1 ---------------------------------------------------原创 2015-07-24 17:13:47 · 7256 阅读 · 1 评论