
s4: 数据库
涛歌依旧
毕业后就职于华为和腾讯
展开
-
mysql filesort要小心
最近遇到这个问题:查询性能不达标,一看就知道是没有联合索引,导致order by有了filesort加上联合索引后,问题解决了。原创 2022-06-19 23:58:02 · 511 阅读 · 0 评论 -
最近在学习各种各样的数据库,发现只懂Mysql根本不行
最近在学习各种各样的数据库,发现只懂Mysql根本不行。Mysql相信大家都不陌生,要想深入的学习也是要花大力气。每个语言都有不同的适用场景,也很难说有一种是万能的。现在工作中面对千差万别,数据量也非常的庞大,只懂Mysql短期内也许可以应付一二,但不是长久之计。...原创 2021-11-15 22:23:20 · 944 阅读 · 0 评论 -
详解事务、隔离级别、悲观锁和乐观锁
今天,我们来聊数据库事务ACID、隔离级别、悲观锁和乐观锁。无论是在工作中,还是在笔试面试中,数据库相关的问题,总是绕不开,不会的话,很容易歇菜,你懂的。数据库事务场景在银行系统中,数据库事务是必须的。在电商系统中,也是如此。来看下A给B汇款100元的例子,可以看到,A账户扣款100元,此时如果进程崩溃或者机器掉电,那么这100元就没有加到B的账户中,自然会导致用户的强烈投诉:如果先给B账户加钱,然后给A账户扣钱,会怎样呢?可以看到,此时如果进程崩溃或者机器掉电,银行白白给B加了原创 2021-08-14 12:43:35 · 958 阅读 · 0 评论 -
读从库导致的低概率bug
最近发现一个低概率问题: 现象: 金额丢失 原因: 代码流程控制出错,导致读取了从库的值,更改后,写入了主库。 而读取从库时,主从延迟太厉害,导致读取的值不是最新主库的值。产生更新覆盖丢失。 处理: 在涉及读后写的操作时,一定要从主库读。原创 2020-09-05 18:21:24 · 2888 阅读 · 5 评论 -
数据库事务ACID、隔离级别、悲观锁乐观锁
在银行系统中,数据库事务是必须的。在电商系统中,也是如此。 来看下A给B汇款100元的例子,可以看到,A账户扣款100元,此时如果进程崩溃或者机器掉电,那么这100元就没有加到B的账户中,自然会导致用户的强烈投诉。 如果先给B账户加钱,然后给A账户扣钱,会怎样呢?可以看到,此时如果进程崩溃或者机器掉电,银行白白给B加了100元,而没有扣减A的100元,只怕银行会亏得没裤子穿。原创 2020-06-06 21:00:16 · 3631 阅读 · 11 评论 -
数据库主从复制和读写分离的原理及应用
数据库一主多从,是很经典的结构,对于容灾、可扩展性和高可用性,都是有好处的。主从复制后,可以认为,从库和主库的内容是"一致"的。然而,由于主从复制需要时间,向主库写入数据后,如果直接从从库读取,很可能读不到最新的值,但是,对读实时性要求不高的业务场景,读写分离是没有问题的。原创 2020-06-06 20:54:45 · 2726 阅读 · 2 评论 -
数据库连接池的原理及验证
池子,是一个很广义的概念,电池,酒池,水池,资源池,进程池,线程池,协程池,内存池,连接池,都是池子。今天,我们以MySql数据库为例,来说说连接池。我们知道,TCP的连接需要经历三次握手,TCP的关闭需要经历四次挥手,都需要耗费时间,而MySql的认证和关闭也同样需要耗费时间。自然地,我们想到了MySql连接的复用:把建立好的连接保留起来,用完后不关闭,放在池子中,从而形成连接池,下次需要用的时候,直接去连接池中拿连接。原创 2020-05-16 19:49:00 · 3441 阅读 · 6 评论 -
一个疏忽引起的bug
来看建表语句:CREATE TABLE `xxx` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint(20) unsigned NOT NULL DEFAULT 0, `clear_time` datetime NOT NULL DEFAULT '1970-01-01 00:00:...原创 2020-04-11 17:45:37 · 2714 阅读 · 2 评论 -
mysql记录缺失之谜------要敢于怀疑一切
现象1:代码insert了一条mysql记录,并且有insert的log, 且有mysql给出的耗时, 但记录缺失。 现象2:百分之百没有业务逻辑会去删除这条重要记录。 现象3:人为不会用命令行去删除这条记录。 现象4:自增id在这条记录处缺失,不连续。 怀疑a: 是不是应用代码框架有问题? 导致没有insert成功? 显然跟现...原创 2019-10-25 20:50:18 · 3158 阅读 · 8 评论 -
最近碰到mysql覆盖写的低概率问题
最近碰到一个低概率问题: 10 加40 加60 预期结果是110, 但最终实际结果是50 单机单进程场景,来看下:func proc() { amount := queryAmountFromDb() begin lock begin transaction amount +=...原创 2019-10-18 22:52:11 · 2913 阅读 · 4 评论 -
利用SQL语句查找姓“张”且分数大于80的记录(某公司招聘笔试试题)
某公司招聘的笔试试题中有这样一个题目:利用SQL语句查找姓“张”且分数大于80的记录。 其实, 这个题目很简单, 主要考察求职者有没有用过SQL, 下面, 我们来一起实战一下。 关于SQL练习环境的搭建, 其实非常简单(比如在Windows上, 你只需要下载一个sqlite3.exe即可), 只需要参考我之前的博文即可:“为想学SQLite或练习SQL语言的朋友搭建简单的命令行环原创 2015-06-20 15:40:33 · 10976 阅读 · 2 评论 -
数据库表删除之drop table xxx (某公司实习生招聘笔试试题)
http://blog.youkuaiyun.com/stpeace/article/details/38503843原创 2014-09-25 22:53:42 · 8314 阅读 · 2 评论 -
VC++6.0环境下sqlite数据库编程入门 (是该走进数据库里面了)
马上添加。原创 2014-08-12 00:23:48 · 12319 阅读 · 2 评论 -
MySQL中INSERT的一般用法
转载地址:http://www.blogjava.net/midnightPigMan/archive/2014/12/15/421406.html MySQL中INSERT的一般用法 INSERT语句是最常见的SQL语句之一,但是MySQL中INSERT语句的用法和标准用法不尽相同,下文就为您详细介绍MySQL中INSERT的一般用法,供您参考。转载 2016-12-08 00:14:06 · 10473 阅读 · 1 评论 -
数据库入门
以前听到数据库, 就头大, 知道用过原创 2014-05-10 17:39:34 · 10706 阅读 · 6 评论 -
为想学SQLite或练习SQL语言的朋友搭建简单的命令行环境------在Windows, Linux, Android(用adb连接安卓手机)上玩转SQLite数据库的sqlite3命令行
有言在先: 如果你是只想玩玩SQL语句的lazy bone, 请直接看本文最后的"LAST部分"。 之所以写这篇文章, 是因为觉得SQLite实在是太棒了, 想学习数据库的朋友们, 千万不要错过这么优秀的数据库。 对于初学者来说, SQLite非常容易上手和入门, 可实践性强。 那些年, 在学校的时候, 就想学学数据库, 结果, 在一些砖头般厚厚的理论书籍面前, 我心事重重, 望而却步,直到我遇到《SQLite权威指南》这本好书。好吧, 为SQLite以及《SQLite权威指南》打广告就到此为原创 2015-05-12 20:50:48 · 9772 阅读 · 4 评论 -
为什么寄存器比内存快?
转载地址:http://www.ruanyifeng.com/blog/2013/10/register.html作者: 阮一峰日期: 2013年10月14日计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。同样都是晶体管存储设备,为什么寄存器比内存快呢?转载 2016-06-25 23:37:25 · 9239 阅读 · 0 评论 -
都是缓存惹的火
在实际生活和开发中, 我们都会遇到迟延生效问题, 其中有很多与缓存相关。 有缓存, 那就不实时。 1. 修改个csdn博文, 还有缓存时间呢.。 2. 领导批准某东东后, 我们去刷新, 不一定能立即看到结果, 不要急着催领导, 要考虑迟延生效哈。 3. 修改了某代码, 发现代码没有生效, 有可能是缓存哈。 4. 下线了某操作入口, 但是还有原创 2016-07-07 23:41:58 · 7240 阅读 · 1 评论 -
mysql反引号的使用(防冲突)
转载地址:http://blog.itechol.com/space.php?uid=33&do=blog&id=6681问题描述: 工作中搭建gitlab服务器,在使用mysql数据库测试数据插入时出现错误,根据错误提示需查看gitlabhq_production数据库中keys表的相关信息,可执行查询语句中总是报错,如下示:mysql> sele转载 2016-12-08 00:13:33 · 10338 阅读 · 0 评论 -
mysql的AUTO_INCREMENT如果达到最大值会怎样呢?
在之前的一个项目中, mysql的自增值类型是int unsigned形式的, 我就在想, 要是超过这个值会怎样呢? 有问题, 必然有解决方法, 可以修改int unsigned类型为bigint类型, 这是64位的整数, 如果超过64位的整数, 会怎样呢? 自己可以写几个mysql语句试一下, 满了会出错. 那怎么办呢? 实际上, 你的自增id永远无法达到这个值。原创 2017-09-22 19:34:36 · 15293 阅读 · 4 评论 -
计算机存储器简介
你肯定喝过水, 要么是用碗装的, 要么是用瓶瓶罐罐装的, 这些都是容器, 你也可以叫它们为存储器。 小时候, 很多朋友接触过复读机, 里面是磁带不停转动, 磁带上面是有数据的, 就跟碗里有水一样。 计算机中的存储器, 也是一样。 你肯定去过公共厕所吧, 我上次肚子不舒服, 很想去拉屎, 去了一个公共厕所, 刚好有8个坑位, 每个坑位要么有人, 要么没有人, 也就是0原创 2017-09-24 09:13:09 · 8206 阅读 · 2 评论 -
我用过的sqlite和mysql
什么是数据库呢? 说白了, 数据库就是文件, 更准确一点, 是结构化的文件。 之前做嵌入式的时候, 玩过sqlite, 人如其名(lite), 轻量级,能嵌入到应用程序中。自包含的且基于文件。Instead of托管在服务器上基于进程通信, SQLite另辟蹊径,它作为一个独立进程直接访问数据文件。很多app就是用sqlite来做数据库的, 你我的手机里面, 肯定有这种数据原创 2017-09-20 23:35:37 · 9617 阅读 · 0 评论 -
mysql命令什么时候带table关键字, 什么时候不带table关键字呢?
mysql命令什么时候带table关键字, 什么时候不带table关键字呢? 这是个简单的问题, 如果不注意, 每次不是都table就是少table, 心烦意乱。 我的经验是: 操作表本身的时候, 是需要带table的, 比如drop table tb_name; 操作表的记录的时候, 是不需要带table的, 比如select *原创 2017-09-30 20:57:46 · 7723 阅读 · 1 评论 -
后宫佳丽到底有几千?------聊聊页面置换算法之FIFO LRU LFU
先说枯燥的。 很多程序员甚至没有听说过虚拟内存这个概念, 情有可原, 因为虚拟内存机制虚拟得太好, 所以, 很多非计算机专业的人, 根本就没有感知到, 包括我。 虚拟内存号称能虚拟出比实际内存更多的内存, 这是扯淡吗? 如果不是, 它又是怎样做到的呢? 先不说这些。 在古代, 皇帝可谓一手遮天, 想要什么就有什么, 想和谁约会, 就跟谁约会。原创 2017-09-30 21:23:50 · 7165 阅读 · 1 评论 -
磁带录音原理
读初中的时候, 以要学习英语为由, 硬是让爸妈买了一个“单放机”, 那时候玩得不亦乐乎。 我对磁带录音的原理有点兴趣, 看图: 录音: 声 电 磁 放音: 磁 电 声原创 2017-10-01 01:02:00 · 11465 阅读 · 0 评论 -
胶片相机和露天电影存储
小时候, 偶尔会有外人进村拍照, 收费。 在那物质匮乏的年代, 能照上相, 就感觉很幸福了, 我小时候的照片就不多。 照完相后, 有一个存储相的东西, 叫底片, 如果仔细看下, 就能在底片中看到人的轮廓。 拿个底片, 可以洗成相片。 那年代, 镇上有很多照相馆, 还记得广告是: 半分钟取相。意思是随照随取, 而在更早前, 是照完后, 要几天时间后, 才能去取相片的。 顺便说句, 底片上面是模拟信号原创 2017-10-01 09:35:45 · 7372 阅读 · 0 评论 -
硬盘的读写原理------写得不错
转载地址:http://blog.youkuaiyun.com/hguisu/article/details/7408047 硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看转载 2017-10-01 10:14:35 · 13717 阅读 · 0 评论 -
为什么叫随机存取存储器(Random Access Memory)?
首先, RAM翻译为随机存取存储器, 是个垃圾翻译, 能说点人话吗? 依据我的经验, 如果不明白一个东西是什么, 那就去找英文资料来看, 英文适合描述准确的东西, 而中文, 适合描述不清不楚的东西, 比如暧昧。 来看看wiki怎么说: In computer science, random access (more precisely and mor...原创 2017-10-01 10:49:46 · 20047 阅读 · 5 评论 -
mysql distinct 和 group by
刚好用到, 记录一下, 表为:mysql> select * from t1;+----+------+-----+---------------------+| id | name | age | tt |+----+------+-----+---------------------+| 30 | n1 | 10 | 2017-10-19 1原创 2017-10-19 10:36:17 · 7113 阅读 · 0 评论 -
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be def
如下:mysql> create table tbx( -> id int unsigned not null auto_increment, -> score int not null -> );ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and原创 2017-10-03 20:14:30 · 24098 阅读 · 4 评论 -
浅聊SRAM和DRAM的区别
SRAM和DRAM都是RAM, 中文名叫随机存储器, 随机是怎么意思呢? 意思是, 给定一个地址, 可以立即访问到数据(访问时间和位置无关), 而不像咱们熟悉的磁带, 知道最后一首歌 在最后的位置, 却没法直接一下子跳到磁带的最后部门, 所以磁带不是随机存储器, 而是顺序存储器。 来看看SRAM的电路: 上面是能保存SRAM的一个bit,原创 2017-10-21 22:47:04 · 8978 阅读 · 1 评论 -
数据仓库列错位问题
某数据仓库, 一直工作得好好的, 某天, 我删除了一个字段/列, 结果从删除位置开始, 出现挪位。 最开始我还以为是自己字段上报错误呢。 呵呵哒。 废弃旧仓库ID, 建议新仓库ID, 问题解决。原创 2017-11-10 19:14:24 · 7474 阅读 · 1 评论 -
我勒个去, 外网少了一个sql字段
刚才接到同事反馈, 说外网出现了某错误, 我心想, 这么奇怪? 查了一下, 果然是有错, 原来, 外网服务对应的mysql数据库少了个字段, 执行sql操作的时候出现失败。 加上后, 就搞定了, 我勒个去, 发布的时候, 居然遗漏了这点。原创 2017-11-04 19:58:41 · 6965 阅读 · 1 评论 -
避免在sql的where中对字段进行转换(函数转换/操作符转换/隐式转换)------索引会失效从而导致慢查询
看例子:mysql> show create table tb_test;+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------原创 2017-11-20 22:20:25 · 8427 阅读 · 1 评论 -
linux下安装mysql的步骤详解
以ubuntu为例, 执行:1. sudo apt-get install mysql-server2. sudo apt-get install mysql-client3. sudo apt-get install libmysqlclient-dev 安装完毕, 就是这么简单。 安装过程会提示输入密码, 建议你输入密码, 不过我只直接一路按enter坐过来的原创 2017-11-20 22:42:21 · 7093 阅读 · 0 评论 -
mysql explain执行计划详解
转载地址: https://www.cnblogs.com/xiaoboluo768/p/5400990.html 1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。 2)、select_type列常见的有:A:simple:表示不需要转载 2017-11-20 23:11:57 · 6969 阅读 · 1 评论 -
mysql主键必定是唯一索引------顺便用实例说说索引的创建
创建表:CREATE TABLE `tbtest` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'student id', `name` VARCHAR(32) NOT NULL COMMENT 'student name', `score` INT UNSIGNED NOT原创 2017-11-20 23:09:57 · 7756 阅读 · 1 评论 -
数据库索引是怎样工作的?
转自:http://www.programmerinterview.com/index.php/database-sql/what-is-an-index/How do database indexes work? And, how do indexes help? Provide a tutorial on database indexes.Let’s start out转载 2017-11-20 23:11:35 · 7217 阅读 · 0 评论 -
深度剖析hdfs原理
转载地址:http://www.cnblogs.com/tgzhu/p/5788634.html 在配置hbase集群将 hdfs 挂接到其它镜像盘时,有不少困惑的地方,结合以前的资料再次学习; 大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS、Map-Reduce、 Bigtable,其中GFS、Map-Reduce技术直接支转载 2017-07-01 16:07:29 · 8849 阅读 · 0 评论 -
MapReduce原理与设计思想
转载地址:http://blog.jobbole.com/80619/简单解释 MapReduce 算法一个有趣的例子你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查并且数出有多少张是黑桃?MapReduce方法则是:给在座的所有玩家中分配这摞牌让每个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你你把所有玩家告诉你转载 2017-07-01 16:04:26 · 11605 阅读 · 1 评论