
mysql
文章平均质量分 82
七年·
这个作者很懒,什么都没留下…
展开
-
MySQL join原理与优化
内连接:mysql中内连接写法比较多,下面的写法作用都是一样的:select * from a,b where xxx;select * from a join b on xxx where xxx;select * from a cross join b on xxx where xxx;select * from a inner join b on xxx where xxx;在内连接中,on与where的作用是一样的都是起到过滤作用,a与b哪个是驱动表是由优化器去选择的.外连接:se原创 2021-01-07 16:45:59 · 386 阅读 · 0 评论 -
mysql 索引合并
有没有听说过,单表select只能使用一个索引,这句话是不对的,有些情况下会使用多个索引,进行索引合并查询.索引合并对应于exlian中的type 为index_merge.如下图后面的extra里面的using uninon是指的索引合并的类型.索引合并分为三种类型:intersection索引合并 union索引合并 sort-union索引合并...原创 2021-01-07 15:26:57 · 868 阅读 · 0 评论 -
MySQL B+Tree索引概念
索引作用是为了提高数据检索效率,通过二分查找法快速定位数据范围.下图是B树索引与B+Tree索引存储原理图(本人画太慢了,扣的网图):B-Tree索引:B+Tree索引:(网上原图不是太准确,所以我调整了一下)对上图的概念解释:树节点的概念:根节点:最顶层的节点,有且只有一个节点 (对应图中磁盘块1)叶子节点:最底层的节点 (对应图中磁盘块4~9)内节点:除根节点与叶子节点的节点都是内节点 (对应图中磁盘块2和3)页:页是mysql与磁盘交互的基本单位,默认大小16K,用户数据原创 2021-01-05 12:55:10 · 530 阅读 · 0 评论 -
Mysql页的基本概念
mysql与磁盘交互的基本单位是页而不是一条记录,页的大小是16k,对应的系统变量是innodb_page_size页的类型页名称描述FILE_PAGE_UNDO_LOGundo日志页FILE_PAGE_INODE段信息页FILE_PAGE_IBUF_BITMAPchange buffer属性页FILE_PAGE_FREE_LISTchange buffer空闲列表FILE_PAGE_TYPE_SYS系统数据页FILE_PAGE_TYPE_TR原创 2020-12-31 16:52:56 · 1584 阅读 · 0 评论 -
MySQL InnoDB引擎数据存储行格式
mysql基本存储单元是页,是服务器与磁盘交互的最小单位,默认大小16k,查看页大小:show variables like 'innodb_page_size' =>16384页中存储着多行数据,InnoDB引擎数据的存储格式也就是行格式有四种:COMPACT REDUNDANT DYNAMIC COMPRESSED创建表时指定行格式:CREATE TABLE XXX (XXX) ROW_FORMAT=COMPACT;COMPACT行格式:不定长字段长度列表记录了所有原创 2020-12-31 13:59:04 · 279 阅读 · 0 评论 -
mysql字符集与比较规则
查看当前mysql支持的字符集show charset [like 'utf8%'];Charset:字符集名称Default_collation:默认的比较规则Maxlen:最大长度,utf8字符长度为1-3所以MaxLen为3 utf8mb4字符长度1-4所以Maxlen为4查看当前mysql中支持的比较规则show collation [like 'utf8%'];Default:是否是当前字符集默认的比较规则Complied:是否将字符集编译到了server中Sortlen原创 2020-12-29 18:01:13 · 705 阅读 · 0 评论 -
mysql自定义函数
mysql只能自定义udf函数,udaf函数不支持自定义.自定义函数需要了解循环结构原创 2020-11-30 18:30:10 · 167 阅读 · 0 评论 -
mysql循环判断结构
Mysql循环判断结构在自定义函数或者存储过程中经常要用到的循环判断结构:if判断: if 条件 then xxx; [elseif 条件 then xxx;] [else xxx;] end if;case when 判断 case when 条件 then xxx; when 条件 then xxx; else xxx; end case;while循环[标签名:]while 条件 do xxx end while [标签名];离开循环原创 2020-11-30 18:18:23 · 1027 阅读 · 0 评论 -
mysql系统变量 用户变量 局部变量
mysql中变量分为系统变量,用户变量,局部变量系统变量又分为全局(global)变量与会话(session)变量,全局与会话的区别在于,全局是在服务重启之前的所有连接,而会话作用于当前一次的连接,这里的连接指的是navicate打开的一个查询窗口,或者cmd中一次mysql连接,或者jdbc中的一个connection.用户变量与局部变量作用域只是会话.并且局部变量的只在begin … end中有效.系统变量系统变量也就是mysql相关参数,如事务隔离级别,自动提交等查看所有系统变量:sh原创 2020-11-29 20:10:02 · 1117 阅读 · 0 评论 -
mysql多表更新与多表删除
多表更新:update tableA inner/left/right join tableB on xxxx set xxxxx;原创 2020-11-25 14:14:33 · 1165 阅读 · 0 评论 -
mysql函数整理(字符串函数,日期函数,数字函数)
字符串函数函数描述使用CHAR_LENGTH(s)返回字符串s的长度CHAR_LENGTH(123)=>3CHARACTER_LENGTH(s)同上CONCAT(s1,s2…sn)拼接字符串,如果有null返回nullCONCAT(‘a’,‘b’,‘c’)=>‘abc’ CONCAT(‘a’,‘b’,null)=>nullCONCAT_WS(sep, s1,s2…sn)指定分隔符(sep)拼接字符串,忽略字符串为nullCONC原创 2020-09-10 15:58:05 · 330 阅读 · 0 评论 -
mysql插入更新on duplicate key/replace into(upsert)
针对于插入更新:主键/唯一索引有的话就根据主键/索引更新,没有的话就插入,mysql特有语句是通过on duplicate key 跟replace实现的.1 on duplicate keyinsert into 表名 values(列值1,列值2,列值3…) on duplicate key update 列名1=值/values(列名1),列名2=列值/valules(列名2)…有数据:CREATE TABLE `account` ( `id` int(11) NOT NULL, `原创 2020-07-09 15:45:16 · 1709 阅读 · 0 评论 -
mysql InnoDB引擎与锁机制
1 共享锁与排它锁共享锁(S锁):指读锁排它锁(X锁):写锁,更新或删除锁事务A对记录加共享锁,事务B对相同数据可以加共享锁,但是不能加排它锁事务A对记录加排它锁,事务B对相同数据既不能加共享锁也不能加排它锁.select 时也可以显示加共享锁:在语句最后加lock in share mode;select 时也可以显示加排他锁:在语句最后加for update;2 意向锁意向共享锁(IS):表共享锁 lock TABLES 表名 read; unlock tables;意向排它锁(I原创 2020-07-07 13:24:35 · 503 阅读 · 0 评论 -
mysql的MVCC原理
MVCC:Multiversion concurrency control,多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题.InnoDB中锁可以分成读锁跟写锁,读锁与写锁是互斥的,通过锁机制可以实现解决事务并发带来的脏读,不可重复读,幻读,但是加锁的话开销大,数据库本身除了安全性还需要有较好的性能,所以就用MVCC代替了读锁,减少了加锁解锁的开销,也就是通过select 查询直接走MVCC,客户以跟update等操作并发执行.MVCC在mysql中原创 2020-07-06 14:12:44 · 164 阅读 · 0 评论 -
mysql事务隔离级别
事务并发可能产生的问题:1 脏读 一个事务读取到了另外一个事务修改但是还没有提交的数据,比如,一个事务A查询i=1的数据,查询出来后是i=1 name=‘zhangsan’,此时,另外一个事务B执行了update语句,把id为1的记录name改成了’lisi’,但是还没有提交,此时A再次执行查询发现,结果变成了i=1,name=‘lisi’,这个现象叫做脏读2 不可重复读 事务A执行第一次查询,结果i=1 name=‘zhangsan’,此时事务B修改了name为’lisi’并且提交了事务,此时A再次查原创 2020-07-03 14:50:10 · 145 阅读 · 0 评论 -
mysql 行转列,多行转一行,列转行,一行转多列
创建表语句:CREATE TABLE student_score(id BIGINT PRIMARY key auto_increment,s_name VARCHAR(20) ,s_sub VARCHAR(20),s_score INT );insert into student_score values(null,'张三','数学',90);insert into student_score values(null,'张三','语文',85);insert into student_原创 2020-05-19 18:46:00 · 14816 阅读 · 2 评论