随笔分类 - mysql
摘要:一、MySQL 为日期增加一个时间间隔:date_add()。 1、 示例: set @dt = now(); select date_add(@dt, interval 1 day); - 加1天 select date_add(@dt, interval 1 hour); -加1小时 selec
阅读全文
摘要:MySQL事务的ACID,其中(C)一致性是最终目的。 保证一致性的措施有: A原子性:靠undo log来保证(异常或执行失败后进行回滚)。 D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通过redo log最终将数据保存至磁盘中)。 I隔离性:事务间的读写靠MySQL的锁
阅读全文
摘要:innodb 通过buffer pool, logBuffer, Redo Log, Undo Log 来实现事务的, 以update语句举例: innodb 在收到一个update语句后, 会先根据条件找到数据所在的页, 并将该页缓存在buffer pool中 执行update语句, 修改buff
阅读全文
摘要:之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块。一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条 SQL 更新语句的执行流程又是怎样的呢? 首先我们创建一个表 user_info,主键为 id,创建语句如下: Copy
阅读全文
摘要:InnoDB是行锁还是表锁取决于SQL语句,行锁是实现在索引上的,而不是锁在物理行记录上,如果没有命中索引,相当于没有索引,则升级为表锁。行锁不容易被发现,比较狡猾,因为它超时时间是50秒,可以通过ER_LOCK_WAIT_TIMEOUT EXCEEDED错误发现。发生原因有select for u
阅读全文
摘要:1,要么是长时间查询,比如因为执行了错误的执行计划就flush table或者analyze table,这样可能导致其他查询语句执行时间过长的问题, 2,要么是lock table read, 3,要么是开启了事务没有提交, 4,要么是关闭了自动提交事务配置。
阅读全文
摘要:blocked nested loop join使用了数组arr[join_buffer_size],如果外层小表数量把数组撑满了,然后到内层大表中全表扫描查询数据,把符合条件的数据保存下来,然后清空数组,再到外层小表中把数组撑满如此往复,直到小表没数据了,查询也就结束了,内层大表查询不用索引,也可
阅读全文
摘要:1,MySQL左连接查询并分页,可能右边表不存在满足查询条件需要的数据,应该返回空列表,但是左边表有数据就会返回数据,不符合实际情况的需求,这时需要先在左边表里先用exists子句来关联右边表中的某个字段的查询条件来判断是否存在右边表中的数据,如果不存在就返回空列表数据,这时就满足需求了,除非右边表
阅读全文
摘要:SQL语句: SELECT * FROM table_name AS ta WHERE ta.唯一键 = ( SELECT max( tb.唯一键 ) FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 ); 如果想排序加分页查询,SQL语句: SEL
阅读全文
摘要:如果需要对关联查询(inner join)做分组(group by),并且按照关联表(actor)中的某个列进行分组,那么通常采用关联表(actor)的标识列(actor_id)分组的效率比其他列更高: select actor.first_name,actor.last_name,count(*)
阅读全文