![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
云养猫v2
这个作者很懒,什么都没留下…
展开
-
MySQL char和varchar
1.mysql中char与varchar的区别char:定长,效率高,一般用于固定长度的表单提交数据存储;例如:身份证号,手机号,电话,密码等;varchar:不定长,效率偏低2.varchar类型的变化MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0-255或者1~255(根据不同版本数据库来定)。varchar在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和原创 2020-12-22 10:37:31 · 295 阅读 · 0 评论 -
MySQL InnoDB存储引擎下的行格式与页格式
InnoDB存储引擎是面向行的,也就是说数据是按照行进行存放的。常用的行记录格式有Compact和Redundant。Compact行记录格式Compact行记录的格式如下变长字段长度列表NULL标志位记录头信息行1数据行2数据…1,非NULL变长字段列表按照行的顺序逆序放置的若行的长度小于255字节,用1字节表示若行的长度大于255字节,用2字节表示是因为VARCHAR类型最大长度限制为655352,NULL标志位该位置指示了该行数据中是否有NULL值,原创 2020-12-21 20:54:28 · 183 阅读 · 1 评论 -
B-Tree B树数据结构
public class BTree<Key extends Comparable<Key>, Value> { // max children per B-tree node = M-1 // (must be even and greater than 2) // 每个节点不超过M-1 children,一旦超过则分裂,M为 > 2的偶数 private static final int M = 4; private Node ro原创 2020-10-01 19:28:48 · 117 阅读 · 0 评论 -
sql语句执行, having
having是分组之后,筛选符合条件的组。不是组内筛选。FROM <left_table>ON <join_condition><join_type> JOIN <right_table>WHERE <where_condition>GROUP BY <group_by_list>HAVING <having_condition>SELECTDISTINCT <select_list>ORD.原创 2020-08-20 09:28:41 · 148 阅读 · 0 评论 -
数据库范式
第一范式:指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。不满足第一范式(1NF)的数据库就不是关系数据库。第二范式 :就是非主属性完全依赖于主关键字(主键)第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。否则就会有大量的数据冗余。BC范式 :在 3NF 的基础.原创 2020-08-18 22:01:39 · 60 阅读 · 0 评论 -
分布式id 雪花算法
SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:1bit,不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用整数,所以最高位固定为0。41bit-时间戳,用来记录时间戳,毫秒级。41位可以表示个数字,如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 ,减1是因为可表示的数值范围是从0开始算的,而不是1。也就是说41位可以表示个毫秒的值,转化成单位年则是年10bit-工作机器id,用来记录工作机器原创 2020-08-13 14:32:34 · 149 阅读 · 0 评论 -
count(*) count(1) count(id) count(字段名)
总结count() :innoDB引擎遍历表,但不取值,count()肯定不是null,按行累加count(1):innoDB引擎遍历表,但不取值,server层对于返回的每一行放1个数字1进去,肯定不是null, 按行累加count(id主键) : InnoDB引擎会遍历整张表,把每一行行的id值全部取出来,返回给server层,server层拿到id后,判断是不可能为空的,就按行累加。count(字段) 1.如果这个字段是定义为not null的话,一行行地从记录里面读出这个.原创 2020-08-13 09:06:10 · 188 阅读 · 0 评论 -
mysql max_connections 数据库并发量
show variables like '%max_connections%';这个参数j实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;最大连接数就是最大并发连接数的意思max_connection默认值是151如果这个参数设置过小,mysql会出现 too many connection的错误...原创 2020-04-28 10:44:25 · 262 阅读 · 0 评论 -
MySQL 为何要使用自增int作为主键
数据存储空间小InnoDB默认都会在主键上建立主键索引,使用int作为主键可以将更多的索引载入内存,提高查询性能在数据插入时,可以保证逻辑相邻的元素物理也相邻,便于范围查找在数据插入、删除、更新时可以做到索引数据尽可能少的移动、分裂页,减少碎片的产生缺点:如果存在大量的数据,可能会超出自增长的取值范围安全性低,因为是有规律的,容易被非法获取数据...原创 2020-04-03 11:06:45 · 1061 阅读 · 0 评论 -
SQL注入 mybatis的#{} ${} statement preparestatement
一个sql 是经过解析器编译并执行,注意这里是一个并字。${}select * from account where username = ${username} and password = ${password} limit 10如果为username 传参数 '1' or 1=1 # password aaa上述sql语句经过编译并执行就变成了 **参数参与了编译**s...原创 2020-04-01 23:37:18 · 296 阅读 · 0 评论 -
MySQL主从复制
1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events)2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本...原创 2020-03-26 18:09:11 · 90 阅读 · 0 评论 -
mysql InnoDB一致性非锁定读(MVCC)
一致性非锁定读(Consistent nonlocking read)指InnoDB存储引擎通过多版本控制的方法来读取当前执行时间数据库中行的数据。之所以成为非锁定读,因为这种方式不需要等待访问行上的排他锁的释放。快照数据(当前行数据之前的历史版本),每行记录可能有多个版本。MVCC实现是通过undo日志实现的,当一条记录被修改时,当前的老版本数据会作为一条undo记录保存在undo ...原创 2020-03-26 15:09:16 · 163 阅读 · 0 评论 -
mysql InnoDB下的锁和next-key locking
两个标准的行级锁:共享锁(S Lock): 允许事务读一行数据排他锁(X Lock):允许事务删除或更新一行数据。表级别锁(意向锁):意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁。意向排他锁(IX Lock), 事务想要获得一张表中某几行的排他锁。InnoDB存储引擎有3中行锁的算法:Record Lock:单个行记录上的锁Gap Lock : 间隙锁,锁定一个...原创 2020-03-26 15:06:37 · 260 阅读 · 0 评论 -
redo log与undo log
redo log 用来保证事务的持久性InnoDB存储引擎中,大部分情况下redo是物理日志,记录的是数据页的物理变化redo log 的主要作用是用于数据库的崩溃恢复redo的组成一是内存中重做日志缓冲(redo log buffer),是易失的,在内存中而是重做日志文件(redo log file),是持久的,保存在磁盘中写入redo的时机:在数据页修改完成后,在脏页刷出磁盘之前...原创 2020-03-26 11:30:03 · 2178 阅读 · 0 评论 -
MySQL事务中的redo与undo
redo logredo重做日志(redo log)用来保证事务的持久性。实际上可以分为两种类型:物理redo日志逻辑redo日志在InnoDB存储引擎中,大部分情况下redo是物理日志,记录的是数据页的物理变化。而逻辑redo日志,不是记录页面的实际修改,而是记录修改页面的一类操作,比如新建数据页时,需要记录逻辑日志。大部分情况下,redo是物理日志,DML对页的修改操作,需要记录r...原创 2020-03-26 10:56:10 · 197 阅读 · 0 评论 -
MySQL索引原理及慢查询优化
select count(*) from task where status=2 and operator_id=20839 and operate_time>1371169729 and operate_time<1371174603 and type=2;考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO...转载 2020-03-19 00:37:27 · 97 阅读 · 0 评论 -
Mysql 大数据量分页查询方法及其优化
1,直接使用数据库提供的SQL语句select * from table limit (page-1)*size, size;2,建立主键或唯一索引, 利用索引(假设每页10条)SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) LIMIT M3,基于索引再排序SELECT * FROM 表名称 WHERE id_pk > (page...转载 2020-03-17 11:29:19 · 159 阅读 · 1 评论 -
mysql EXPLAIN的参数解析
+----+-------------+-------+------------+------+---------------+-----+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref ...原创 2020-03-16 18:17:07 · 318 阅读 · 0 评论 -
MySQL事务中的redo与undo
redo logredo的类型重做日志(redo log)用来保证事务的持久性。实际上可以分为两种类型:物理redo日志逻辑redo日志在InnoDB存储引擎中,大部分情况下redo是物理日志,记录的是数据页的物理变化。而逻辑redo日志,不是记录页面的实际修改,而是记录修改页面的一类操作,比如新建数据页时,需要记录逻辑日志。大部分情况下,redo是物理日志,DML对页的修...原创 2020-03-16 13:12:46 · 154 阅读 · 0 评论 -
mysql复合索引的意义
1,“一个顶三个”,建立一个(a,b,c)复合索引,相当于建立了(a),(a,b),(a,b,c) 3个索引,因为每多一个索引,都会增加写操作的开销和磁盘空间的开销。2,覆盖索引。如果有sql:select a,b,c from table where a=1 and b=1.那么mysql可以直接通过遍历索引取得数据,而无需回表,这样可以减少很多的io操作。(不需要才通过聚集索引去查找对应的...转载 2019-03-23 16:50:24 · 1685 阅读 · 0 评论 -
常见sql语言概述DDL DML
DDL:数据定义语言(CREAT ,DROP , ALTER)DML:数据操作语言(INSERT , DELETE , UPDATE)DCL:数据控制语言(GRANT . REVOKE)DQL : 数据查询语言(SELECT)原创 2019-03-21 22:04:53 · 134 阅读 · 0 评论 -
drop,delete与truncate的区别
drop 直接删掉表truncate删除的是表中的数据,再插入数据时自增长的数据id有重新从1开始delete删除表中数据,可以后接where语句原创 2019-03-11 20:13:20 · 179 阅读 · 0 评论 -
Sql语句解析和执行顺序
SQL解析顺序:SELECT DINSTINCT < select_list >FROM < left_table > < join_type >JOIN < right_table > ON <join_condition >WHERE < where_comdition >GROUP ...原创 2019-02-22 15:03:45 · 260 阅读 · 0 评论 -
为什么mysql用B+树做索引而不用B-树或红黑树
https://blog.csdn.net/qq_35923749/article/details/88068659一,B+树做索引而不是用B-树mysql如何衡量查询效率?--磁盘IO次数一般来说索引非常大,尤其是关系型数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也被存储在磁盘上。B-tree和B+tree的特点就是每层节点数目非常多,层数很少,目的就是为了减少...转载 2019-03-05 09:29:42 · 1543 阅读 · 1 评论 -
数据库 ACID及事务隔离级别
事务:并发控制和恢复的基本单位。Atomicity原子性:事务是数据库的逻辑工作单位,事务中包括的所有操作要么都做,要么什么都不做。Consistency一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。。Isolation 隔离性:并发的事务...原创 2019-02-22 15:48:11 · 383 阅读 · 0 评论 -
mysql索引失效的情况
1. where条件语句中有or,即使其中有条件带索引也不会使用索引(除非or的每个条件都是索引)2. where字句的查询条件里有不等于号3. where字句的查询条件里使用了函数的列4. 对于复合索引,引用非第一位置的索引列5. 查询语句like以%开头(不符合最佳左前缀)6.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则索引无效7. 如果mysql...原创 2019-02-21 16:11:41 · 156 阅读 · 0 评论 -
数据库添加索引为什么能加快查询速度
https://blog.csdn.net/qq_15037231/article/details/80539964数据库建立索引为什么会加快查询速度首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明...转载 2019-03-06 15:31:53 · 683 阅读 · 0 评论 -
索引的优缺点及什么时候需要索引
优点:通过创建唯一索引,可以保证数据库表中每一行数据的唯一性 可以大大加快数据的检索速度 通过使用索引,可以在查询过程中使用优化隐藏器,提高系统性能缺点:创建索引和维护索引要耗费时间,时间随数据量的增加而增加 索引需要占物理空间应该建立索引的情况在经常需要搜索的列上 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构 在经常需要根据范围进行搜索的列上创建索引,因为...原创 2019-03-08 21:16:25 · 842 阅读 · 0 评论 -
MyISAM和InnoDB的区别
1.MyISAM是非事务安全的,而InnoDB是事务安全的。2.MyISAM的锁粒度是表级,而InnoDB是支持行级锁的。3.每个MyISAM在磁盘上存储成三个文件。.frm文件存放表格定义、.MYD是数据文件、.MYI是索引文件。 InnoDB把数据和索引存放在表空间里,即.ibd文件,还有表定义文件.frm。4.清空整个表时,InnoDB是一行一行的删除,效率非常慢。M...原创 2019-03-04 14:47:10 · 76 阅读 · 0 评论 -
InnoDB逻辑存储结构
表空间(tablespace)由段(segment)、区(extent)、页(page)组成。一个区 = 64页(连续的)1M = 64 * 16K原创 2019-03-04 15:00:53 · 112 阅读 · 0 评论 -
mysql中主键索引与普通索引(聚集索引和辅助索引)
B+树索引并不能找到一个给定键的具体行。B+树索引能找到的只是被查找数据行所在的页。然后数据库通过把页读入内存,再在内存中进行查找,最后得到要查找的数据。B+树(平衡多路查找树):B+树是为了磁盘或其它直接存取设备设计的一种平衡多路查找树。在B+树里是,所以记录节点都是键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。B+树索引在数据库中有高扇出性的特点,因此...原创 2019-03-04 16:05:43 · 1404 阅读 · 0 评论 -
mysql 索引类型
B+树索引哈希索引Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位1).Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。 2)Hash 索引无法被用来避免数据的排序操作(order by)3)Hash 索引遇到大量冲突的情况下性能并不一定就会比B-Tree索引高空间数据索引(R-Tree) :MyISAM表支...原创 2019-03-04 14:52:29 · 73 阅读 · 0 评论 -
mysql中limit、like
SELECT * FROM table LIMIT 5,10; // 检索记录行6-15//为了检索从某一偏移量到记录集的结束行的所有记录行,可指定第二个参数为-1SELECT * FROM table LIMIT 95,-1; // 检索记录行96-last//如果只给定一个参数,它表示返回最大的记录行数目SELECT * FROM table LIMIT 5; ...原创 2019-03-14 16:03:01 · 385 阅读 · 0 评论 -
checkpoint技术
缓冲池的设计目的是为了协调CPU速度与磁盘速度的鸿沟。因此页的操作首先都是在缓冲池中完成的。如果一条DML语句,如update或delete改变了页中记录,那么此时页是脏的,即缓冲池的页的版本比磁盘的新。数据库需要将新版本的页从缓冲池刷新到硬盘。为了避免数据丢失的问题,当前事务数据库系统普遍都采用Write Ahead log策略,即当事务提交时,先写重做日志,在修改页。当由于发生宕机而导...原创 2019-03-15 14:02:37 · 183 阅读 · 0 评论 -
数据库死锁
死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。解决死锁:1,超时两个事物相互等待时,当一个等待时间超过某一阈值时,其中一个事务进行回滚,另一个事务就可以继续执行了。2,等待图数据库保存锁的信息链表和事务等待链表通过这两个链表可以构造出一张图,若图中存在回路,就代表存在死锁,因此资源见相互等待。通过回滚合适的事务,解决死锁。...原创 2019-03-11 15:09:56 · 94 阅读 · 0 评论