InnoDB

MySQL 8 ignoring integer lengths

让人想犯罪 __ 提交于 2021-01-20 07:06:42
问题 I have a MySQL 8.0.19 running in a Docker container and using the InnoDB engine. I have noticed that table integer field lengths are getting ignored. The issue occurs with integer datatypes regardless if running a CREATE or ALTER query CREATE TABLE `test` ( `id` int DEFAULT NULL, `text_field` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `decimal_field` decimal(6,2) DEFAULT NULL, `int_field` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; The

MySQL 8 ignoring integer lengths

六眼飞鱼酱① 提交于 2021-01-20 07:06:26
问题 I have a MySQL 8.0.19 running in a Docker container and using the InnoDB engine. I have noticed that table integer field lengths are getting ignored. The issue occurs with integer datatypes regardless if running a CREATE or ALTER query CREATE TABLE `test` ( `id` int DEFAULT NULL, `text_field` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `decimal_field` decimal(6,2) DEFAULT NULL, `int_field` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; The

mysql锁

本小妞迷上赌 提交于 2021-01-19 22:02:18
1、什么是锁 2、lock与latch 3、innoDB存储引擎中的锁 3.1、锁的类型 3.2、一致性非锁定读 3.3、一致性锁定读 3.4、自增长与锁 3.5、外键与锁 4、锁的算法 4.1、行锁的三种算法 4.2、解决Phantom Problem 5、锁问题 5.1、脏读 5.2、不可重复读 5.3、丢失更新 6、阻塞 7、死锁 7.1、死锁的概念 7.2、死锁的概率 7.3、死锁的示例 8、锁升级 9、小结 主键锁一条记录: mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s) MySQL thread id 214, OS thread handle 139988100773632, query id 680904 localhost root statistics select * from t_user where id = 1 for update ------- TRX HAS BEEN WAITING 4 SEC FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 113 page no 4 n bits 128 index PRIMARY of table `decent

mysql三种锁

霸气de小男生 提交于 2021-01-19 16:15:03
不使用索引 CREATE TABLE `test1` ( `id` int ( 11 ) DEFAULT NULL , `name` varchar ( 255 ) DEFAULT NULL ) ENGINE = InnoDB DEFAULT CHARSET =utf8; BEGIN ; -- 手动开启一个事务,并在id = 1这条数据上加上排它锁 SELECT * from test1 WHERE id = 1 for UPDATE ; BEGIN ; -- 手动开启另外一个事务,此时给id=2的这条数据进行加排它锁,结果会如何? SELECT * from test1 WHERE id = 2 for UPDATE 发现此时居然查询id=2的数据事务被卡住了。这是为什么呢?当表没有创建索引时或者查询语句没有命中索引时,锁住的是整个表的数据,因为没有命中索引故其会去扫描全表数据。 当一张表没有索引时,innoDB会创建一个隐藏主键索引,当通过隐藏的主键索引去检索时,将该表中所有的隐藏索引检索一遍 例子:如果手动开始事务,并在id=1的数据上手动加上排它锁.如果此时再去查询id=2的数据时,发现此语句卡住了。 故得出没有建立索引的表,一旦锁住数据及为锁住整张表。 主键索引 CREATE TABLE `test2` ( `id` int ( 11 ) NOT NULL , `name

MySQL行级锁和表级锁

主宰稳场 提交于 2021-01-19 04:00:10
  锁定用于确保事务完整性和数据库一致性。 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据。 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能会产生想不到的结果。   在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 行级锁   行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为 共享锁 和 排他锁 。 特点   开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 表级锁   表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为 表共享读锁 (共享锁)与 表独占写锁 (排他锁)。 特点   开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。 页级锁   页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快

MySQL基础架构之查询语句执行流程

…衆ロ難τιáo~ 提交于 2021-01-18 06:53:49
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条语句执行流程之前,我们看看mysql的基础架构。 图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。 server层包括连接器、查询缓存、分析器、优化器、执行器涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视等。 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,平常我们比较常用的是innoDB引擎 连接器 我们在使用数据库之前,需要连接到数据库,连接语句是 mysql -h $ip -u $username -p $password 而我们的连接器就是处理这个过程的,连接器的主要功能是 负责跟客户端建立连接、获取权限、维持和管理连接 ,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限 连接器与客户端通信的协议是 tcp 协议的,连接以后可以使用 show processlist; 看到执行的连接数 同时在连接时间内超过8小时是sleep的状态会自动断开

一条MySQL查询语句的执行流程

强颜欢笑 提交于 2021-01-18 06:32:41
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息: select * from student where id = 2; 在解释这条语句执行流程之前,我们看看MySQL的基础架构。 MySQL的逻辑架构 Server层包括连接器、查询缓存、分析器、优化器、执行器 ,涵盖 MySQL 的大多数核心服务功能,以及所有的 内置函数 ,所有 跨存储引擎的功能 都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,MySQL默认的存储引擎是InnoDB。 1, 连接器 我们在使用数据库之前,需要连接到数据库,连接语句是 mysql -h $ip -u $username -p $password 而我们的连接器就是处理这个过程的,连接器的主要功能是 负责跟客户端建立连接、获取权限、维持和管理连接 ,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限 连接器与客户端通信的协议是 tcp 协议的,连接以后可以使用 show processlist; 看到执行的连接数 MySQL [abc]> show processlist; +------+

白话Mysql的锁和事务隔离级别!死锁、间隙锁你都知道吗?

我是研究僧i 提交于 2021-01-14 20:43:47
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)概述 我们把那些可能会被多个线程同时操作的资源称为临界资源,加锁的目的就是让这些临界资源在同一时刻只能有一个线程可以访问。这是当时在讲synchronized锁时提出的锁的概念。 数据库作为用户共享的一个资源,如何保证数据并发访问一致性也是所有数据库必须解决的问题,如何加锁是数据库并发访问性能的一个重要因素。 (二)关于数据库的锁 从加锁形式上分为 乐观锁 和 悲观锁 从对数据库操作的类型分为 读锁(共享锁) 和 写锁(排他锁) 读锁 :多个读操作可以同时进行不会互相影响 写锁 :当前写操作没有完成前,会排斥其他的读锁和写锁 从数据操作粒度上可以分为 表锁 和 行锁 2.1 表锁 顾名思义,表锁就是锁住整张表。这种操作开销小,加锁快,不会出现死锁,但是锁的粒度大,并发度低。 MyISAM引擎在操作数据时就会自动给数据加上表锁。 可以通过下面几个参数手动增加表锁: lock table 表名 read(write) 查看表上加过的锁: show open tables; 删除锁: unlock tables; 加了读锁后,将限制写入;加了写锁之后,将限制读和写; 2.2 行锁 行锁就是锁住一行数据,这种做法开销大,加锁慢,会出现死锁

MySQL8.0 原子DDL

醉酒当歌 提交于 2021-01-14 05:39:12
MySQL8.0 原子DDL 简介   MySQL8.0 开始支持原子 DDL(atomic DDL),数据字典的更新,存储引擎操作,写二进制日志结合成了一个事务。在没有原子DDL之前,DROP TABLE test1,test2;如遇到server crash,可能会有test1被drop了,test2没有被drop掉。下面来看下在MySQL8.0之前和MySQL8.0 数据字典的区别   在MySQL8.0 之前,Data Dictionary除了存在与.FRM, .TRG, .OPT 文件外,还存在于系统表中(MyISAM 非事务引擎表中),在MySQL8.0 ,Data Dictionary 全部存在于Data Dictionary Storage Engine(即 InnoDB表中),这使crash recovery 维持原子性成为了可能 存储引擎支持   目前,只有InnoDB存储引擎支持原子DDL,为了实现原子DDL,Innodb要写DDL logs 到mysql.innodb_ddl_log 表,这是一个隐藏在mysql.ibd 数据字典表空间里的数据字典表。要看mysql.innodb_ddl_log 中的内容,需要 SET GLOBAL LOG_ERROR_VERBOSITY = 3 ;(MySQL 8.0 默认为2,error log 记录Errors and

阿里云RDS数据库备份文件恢复到本地数据库

心不动则不痛 提交于 2021-01-14 05:38:20
参考这里: https://help.aliyun.com/knowledge_detail/41817.html 第4.2步要多注释掉一些(应该根据实际报错来注释): [mysqld] innodb_checksum_algorithm = innodb #innodb_log_checksum_algorithm = innodb innodb_data_file_path = ibdata1:200M:autoextend innodb_log_files_in_group = 2 innodb_log_file_size = 524288000 #innodb_fast_checksum = false #innodb_page_size = 16384 #innodb_log_block_size = 512 innodb_undo_directory = . innodb_undo_tablespaces = 0 #rds_encrypt_data = false #innodb_encrypt_algorithm =aes_128_ecb 来源: oschina 链接: https://my.oschina.net/u/4311773/blog/4249059