随笔分类 -  Mysql

行数据溢出
摘要:Varchar(M)类型的列最多可以占用65535个字节,其中的M代表该类型最多存储的字符数量,如果我们使用ASCII字符集的话,一个字符就代表一个字节,查看varchar(65535)是否可用: CREATE table test1 ( a varchar(65535)) 阅读全文

posted @ 2021-07-04 16:43 Eleanor123 阅读(34) 评论(0) 推荐(0)

记录的真实数据
摘要:记录的真实数据除了自己定义的列的数据以外,还会有三个隐藏列: 列名 是否必须 占用空间 描述 Row_id 否 6字节 行ID,唯一标识一条记录 Transaction_id 是 6字节 事务ID Roll_pointer 是 7字节 回滚指针 实际上这几个列的真正名称是:DB_row_id、DB_ 阅读全文

posted @ 2021-07-04 16:39 Eleanor123 阅读(48) 评论(0) 推荐(0)

Compact行格式
摘要:变长字段长度列表 NULL标志位 记录头信息 列1数据 列2数据 …… 记录的额外信息: 这部分信息是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息有:变长字段长度列表、null值列表、记录头信息。 (1)变长字段长度列表 MySQL支持一些变长的数据类型,比如varchar(M)、 阅读全文

posted @ 2021-07-04 16:33 Eleanor123 阅读(151) 评论(0) 推荐(0)

InnoDB行格式
摘要:一行记录可以以不同的格式存在InnoDB中,行格式分别是compact、redundant、dynamic和compressed行格式。可以在创建或修改的语句中指定行格式: Create table 表名 (列的信息) row_format=行格式名称 Alter table 表名 row_form 阅读全文

posted @ 2021-07-04 16:31 Eleanor123 阅读(48) 评论(0) 推荐(0)

InnoDB数据页结构
摘要:名称 中文名 占用空间 说明 File header 文件头部 38字节 页的一些通用信息 Page header 页面头部 56字节 数据页专有的一些信息 Infimum+supremum 最小记录和最大记录 26字节 两个虚拟的行记录 User records 用户记录 不确定 实际存储的行记录 阅读全文

posted @ 2021-07-04 15:47 Eleanor123 阅读(31) 评论(0) 推荐(0)

存储引擎
摘要:存储引擎负责对表中的数据进行读取和写入,常见的存储引擎有innoDB、myISAM等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如memory都不用磁盘来存储数据。 在innoDB,数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,inno 阅读全文

posted @ 2021-07-04 15:23 Eleanor123 阅读(97) 评论(0) 推荐(0)

事务的保存点
摘要:一、什么是保存点 如果开启了一个事务,并且已经输入了很多的语句时,如果忽然发现上一条语句有问题,可以用rollback语句来让数据库状态恢复到事务执行之前的样子,然后一切再重来。因为这个问题,MySQL提出了一个保存点savepoint的概念,就是在事务对应的数据库语句中打几个点,我们调用rollb 阅读全文

posted @ 2021-07-03 12:39 Eleanor123 阅读(892) 评论(0) 推荐(1)

事务的隐式提交
摘要:当使用start transaction或begin语句开启一个事务,或者将系统变量auto commit设置为off时,事务不会自动提交,但是如果当输入某些语句会隐式的被提交掉,就像输入了commit语句一样,这种因为某些特殊的语句而导致事务提交的情况叫做隐式提交,会导致事务隐式提交语句包括: ( 阅读全文

posted @ 2021-07-03 00:26 Eleanor123 阅读(1168) 评论(0) 推荐(1)

事务的自动提交
摘要:默认情况下,如果不显式使用start transaction或begin语句开启一个事务,那么每一条语句都是一个独立的事务,这称之为事务的自动提交。 如果需要关闭自动提交的功能,可以使用如下方法进行关闭: 第一,显式的使用start transaction或begin语句开启一个事务,这样在本次事务 阅读全文

posted @ 2021-07-03 00:04 Eleanor123 阅读(447) 评论(0) 推荐(0)

开启事务
摘要:Begin[work]; begin语句代表开启一个事务,后面的work单词可以省略。开启了事务之后,就可以继续写若干语句,这些语句就属于刚开启的这个事务。 BEGIN; sql……; start TRANSACTION Start transaction语句和begin语句功效相同,都标志开启一个 阅读全文

posted @ 2021-07-03 00:01 Eleanor123 阅读(247) 评论(0) 推荐(0)

事务是什么
摘要:事务是由一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能成功对数据库应用该组查询的全部语句,那么就执行该组查询。 如果其中有任何一条因为崩溃或者其他原因无法执行,那么所有的语句都不好执行。即事务内的预计要么全部执行成功,要么全部执行失败。 阅读全文

posted @ 2021-07-02 23:46 Eleanor123 阅读(82) 评论(0) 推荐(1)

MySQL的读写锁
摘要:在处理并发读或写时,可以通过实现一个由两种类型组成的锁系统来解决问题。这两种锁通常被称为共享锁和排他锁,也叫读锁和写锁。 读锁是共享的,相互不阻塞,多个用户同一时刻可以读取同一个资源而不相互干扰。 写锁是排他的,一个写锁会阻塞其他的写锁和读锁,确保在给定时间内只有1个用户能执行写入并防止其他用户读取 阅读全文

posted @ 2021-07-02 23:34 Eleanor123 阅读(1085) 评论(0) 推荐(0)

什么是自适应哈希索引
摘要:自适应哈希索引是Innodb引擎的一个特殊功能,当它注意到某些索引值被使用的非常频繁时,会在内存中基于B-Tree所有之上再创建一个哈希索引,这就让B-Tree索引也具有哈希索引的一些优点,比如快速哈希查找。这是一个完全自动的内部行为,用户无法控制或配置,但如果有必要刻意关闭该功能。 阅读全文

posted @ 2021-07-01 23:54 Eleanor123 阅读(654) 评论(0) 推荐(0)

MySQL的B-Tree索引
摘要:大多数MySQL引擎都支持这种索引,但底层的存储引擎可能使用不同的存储结构,例如NDB使用T-Tree,而InnoDB使用B+ tree。 B-Tree说明所有的值都是按顺序存储的,并且每个叶子页到到根的距离相同。B-Tree索引能加快访问数据的速度。因为存储引擎不需要进行全盘扫描来获取数据,是从索 阅读全文

posted @ 2021-07-01 23:50 Eleanor123 阅读(80) 评论(0) 推荐(0)

datetime和timestamp的区别
摘要:Datetime能保存大范围的值,从1001-9999年,精度为秒。把日期和时间封装到了一个整数中,与时区无关,使用8字节存储空间。 Timestamp和Unix的时间戳相同,只使用了4个字节的存储空间,范围比datetime小得多,只能表示1970-2038年,并且依赖时区。 阅读全文

posted @ 2021-07-01 23:40 Eleanor123 阅读(381) 评论(0) 推荐(0)

MySQL主从复制的作用?
摘要:复制的目的让一台服务器的数据与其他服务器保持同步,一台主库的数据可以同步到多台备库上,备库本身也可以配置为另一台服务器的主库。主库备库之间可以用多种不同的组合方式。 MySQL支持的复制方式有两种: (1)基于行的复制。MySQL5.1版本才加入进来。这种方式会将实际数据记录在二进制日志中,最大的好 阅读全文

posted @ 2021-07-01 00:24 Eleanor123 阅读(296) 评论(0) 推荐(0)

MySQL的逻辑架构
摘要:第一层:服务器层。作用是提供连接处理、授权认证、安全等功能。 第二层:MySQL的核心服务功能。包括查询解析、分析、优化、缓存以及日期和时间等所有内置函数,所有存储引擎的功能都在这一层实现,例如存储过程、触发器、视图等。 第三层:存储引擎层。存储引擎层负责MySQL中数据的存储和提取。服务器通过AP 阅读全文

posted @ 2021-06-30 23:57 Eleanor123 阅读(63) 评论(0) 推荐(1)

SQL语句的执行流程
摘要:(1)客户端连接数据库,验证身份 (2)获取当前用户权限 (3)当查询时会先查缓存,如果有就返回;如果没有分析器会对SQL做此词法分析 (4)优化器对SQL进行“它认为比较好的优化” (5)执行器负责执行SQL语句 (6)服务端将数据返回给客户端 阅读全文

posted @ 2021-06-30 23:48 Eleanor123 阅读(253) 评论(0) 推荐(1)

Count(*)在不同引擎的实现方式
摘要:MyISAM:表一个表的总行数存在了磁盘上,执行Count(*)时候会直接返回这个数,效率很高。 Innodb:它执行Count(*)时候,需要把数据一行一行地从引擎中读出来,然后累积计数。 阅读全文

posted @ 2021-06-30 00:27 Eleanor123 阅读(45) 评论(0) 推荐(0)

视图
摘要:视图view是一种虚拟存在的表,对应使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 视图对应普通表的优势体现在下面几个点: 第一,简单。使用视图的时候,用户不需要关系后面对应的表结构、关联条件和筛选条件,对用户来说 阅读全文

posted @ 2021-06-30 00:25 Eleanor123 阅读(66) 评论(0) 推荐(0)