随笔分类 - MySQL/PostgreSQL数据库知识
摘要:一、问题背景 1、报错描述: 今天执行 sql 时发现 Node 服务的日志报错:SequelizeDatabaseError: EE_WRITE: Error writing file '/tmp/MY4QWdUa' (Errcode: 28 - No space left on device)
阅读全文
摘要:我在我的服务器上安装的 MySQL 3306 端口也开了,但是无法访问,查到这篇文章,正好跟我遇到的问题一样,此文记录挺详细的,故记录下。 一、安装步骤 1、查看是否已经安装 Mysql rpm -qa | grep mysql 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名
阅读全文
摘要:一、问题背景 一天在日志上看到很多这种报错: nested exception is java.lang.NumberFormatException: For input string: "434199'and(select*from(select+sleep(0))a/**/union/**/se
阅读全文
摘要:一、问题背景 今天在设计表结构的时候,有个记录表只需要记录下是谁得了什么东西,什么时间得的,也就是3个字段:user_id、medal_id、created_time,通常表也会加主键 id,但是这个表其实不怎么用到,也就是查询谁的记录,或者某东西的记录时会关联查一下。你看都没有 主键id 啥事,所
阅读全文
摘要:一、关于int(1)与int(10) 一、问题背景 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释。
阅读全文
摘要:一、问题背景及介绍 在写 SQL 条件语句时经常用到 不等于 != 的筛选条件。此时要注意此条件会将字段为 Null 的数据也当做满足不等于的条件而将数据筛选掉。(也就是说会忽略过滤掉为 null 的数据,导致数据不准确)。 比如:表A A1B1 1 0 2 1 3 Null 执行如下查询:sele
阅读全文
摘要:一、需求背景 在数据库表里,一般都有主键,主键是不能重复的,因为是唯一标识。假设这个时候需求来了,需要插入一组数据,这些数据中有些是完全新的,可以直接插入(insert),但有些主键内容是和原本表内的数据主键内容是一致的,这些就无法直接插入了,而是执行更新(update)操作。这时候就比较麻烦了,因
阅读全文
摘要:一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。 像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护
阅读全文
摘要:在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?" 你:"因为采用自增主键,数据在物理结构上是顺序存储,性能最好,blabla..." 面试官:"那自增主键达到最大值了,用完了怎么办?" 你:"wha
阅读全文
摘要:一、问题描述 首先说一下,判断表里是否有记录,常见的写法(伪代码) -- 定义变量a a = (select count(*) from tb) if a > 0 ... else ... 这么写是没错,看上去也好理解,就是统计一下tb表中的记录数,然后判断这个记录数是否大于0。可能绝大多数人在实现
阅读全文
摘要:一、计算列 MySQL 的 Generated Column 又称为虚拟列或计算列。Generated Column列的值是在列定义时包含了一个计算表达式计算得到的。 1、定义Generated column列的语法如下: 列名 类型 [GENERATED ALWAYS] AS (expr) [VI
阅读全文
摘要:一、in 与 exists 的区别 1、exists、not exists 一般都是与子查询一起使用,In 可以与子查询一起使用,也可以直接in (a,b.....) 2、exists 会针对子查询的表使用索引,not exists 会对主子查询都会使用索引。in 与子查询一起使用的时候,只能针对主
阅读全文
摘要:一、union、union all 、distinct 的区别和用途 1、从用途上讲:它们都具有去重的效果 2、从效率上讲:distinct 通常不建议使用,效率较低。union all 和 union 而言,union all 效率更高。 原因是:union 相当于多表查询出的数据,进行去重,然后
阅读全文
摘要:在 mysql 操作中我们经常需要对数据进行类型转换,此时我们应该使用的是cast()或convert()。两者的对比: 相同点:都是进行数据类型转换,实现的功能基本等同。 不同点:两者的语法不同,cast(value as type) 、 convert(value,type) 一、语法 1、使用
阅读全文
摘要:一、隐式类型转换问题 1、隐式类型转换: 比如:SELECT 1 + '1'; 2、隐式类型转换的问题: (1)程序可读性差,且依赖数据库的隐式转换规则,效率差,会增加处理时间;且如果数据库升级,则程序可能无法正确执行; (2)有可能会导致索引失效; (3)有可能会导致意想不到的结果; 3、显式类型
阅读全文
摘要:一、SQL having子句简介 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。 HAVING 子句可以让我们筛选分组后的各组数据。 1、SQL HAVING 语法:operator 代表运算操作符、aggregate_function 代表聚合函数 SEL
阅读全文
摘要:1、在select查询中,只返回需要的列。查询中存在的列越少,则使用的IO和网络带宽就会越少。最好不要使用 * 返回所有: select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 2、在减少列的同时,也要考虑一下减少行。使用where子句来减少查询返回的行,不要让应
阅读全文
摘要:一、项目实例问题 1、问题背景 某个需求做了之后,注意到有个接口返回数据特别慢,特别是使用下面的 3 个字段排序时就直接卡死,肯定是 sql 性能写法问题,所以决定研究一下查看究竟。 其实需求挺简单,有几个字段排序,前端需要展示那些字段,然后之前的后端写的 sql 如下,仅提取主要问题点,其实就是需
阅读全文
摘要:一、项目实例 我们有个订单,有不同的产品类型,比如课程、云市场类,那么订单实体类的 imageUrl 就得取自不同的表了。比如 type = 课程时,imageUrl 数据得从课程表里取;type = 云市场时,imageUrl 数据得从云市场表里取。 那么如何写 sql 呢?利用 case whe
阅读全文
摘要:事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。 一、什么是事务 事务是由数据库中一系列的访问和更新组成的逻辑执行单元。事务的逻辑单元中可以是一条SQL语句,也可以是一段SQL逻辑,这段逻辑要么全部执行成功,要么全部执行失败。 举个最常见的例子,你早上出去买早餐
阅读全文