mysql
艾斯比的日常
简单,快乐,分享
展开
-
mysql 数据重复插入语句
replace into如果存在唯一键冲突, 那么先删掉原记录, 再插入新记录replace into my_table (id, name) values (1, '哈哈')insert ignore into如果存在唯一键冲突, 那么本次插入操作会被忽略insert ignore into my_table (id, name) values (1, '哈哈')on duplicate key update xx = values(xx)如果存在唯一键冲突, 那么会更新某些字段的值-原创 2022-03-13 00:59:15 · 1666 阅读 · 0 评论 -
mysql 如何查看建表语句
由于公司都是使用 linux 跳板机连接 mysql, 而某个项目又没有测试环境, 于是只能通过跳板机查看某张表的详细信息. 具体语句如下这里以查看 ups_auth_info 表为例# \G 表示以垂直形式查看结果show create table ups_auth_info \G;...原创 2022-03-11 21:14:37 · 20426 阅读 · 2 评论 -
一张图读懂 sql join
这两天看到一张 sql join 图, 感觉非常直观. 在这里分享下按照图片竖着的顺序写下每种 sqla left join b on a.key = b.keya left join b on a.key = b.key where b.key is nulla full outer join b on a.key = b.keya. inner join b on a.key = b.keya full outer join b on a.key = b.key where a.k原创 2022-03-10 21:47:50 · 235 阅读 · 0 评论 -
mysql 查询语句报 Every derived table must have its own alias
今天看到一条 sql 查了 1w 多条数据, 然后使用代码做了计算分组后最大 id 的逻辑. 想着优化下, 然后 sql 执行报 Every derived table must have its own alias这表示子查询需要命名别名才行例如 from (select * from table2) a 这种, 别名 a 是必要的, 否则报错之后正确的 sql-- 264 rows in set (0.05 sec)select c.id as historyId, c.extract_job原创 2022-03-08 22:21:51 · 446 阅读 · 0 评论 -
mysql 如何查询当前年月日时分秒
使用 now () 获取当前时间使用 date_format () 格式化当前时间声明别名, 提升易读性select date_format(now(),'%y-%m-%d %h:%i:%s') now;```原创 2022-03-01 20:40:24 · 6243 阅读 · 0 评论 -
mysql 表名是否区分大小写
mysql 表名是否区分大小写和 mysql server 部署所在的操作系统有关.在 linux 上是区分大小写的在 windows 上是不区分大小写的需要注意的是, 上面提到的操作系统是 mysql 服务所在的机器 (监听 3306 端口的机器), 而不是 mysql 客户端所在的机器 (与提交 sql 的机器无关)linuxselect * from BIGDATA_INFOwindowsselect * from T_USER......原创 2022-01-25 20:20:15 · 3639 阅读 · 1 评论 -
closing inbound before receiving peer‘s close_notify
closing inbound before receiving peer’s close_notify配置 mysql 连接字符串 &useSSL=false原创 2022-01-16 01:45:09 · 334 阅读 · 0 评论 -
mysql 字符串拼接 concat concat_ws group_concat
以下表数据为例-- concat 用于字符串拼接, 不过如果字段为 null, concat 直接返回 nullselect concat(name, '-', account) from t_user-- concat_ws 用于字符串拼接, 第一个参数为分隔符, 并且字段包含 null 会被忽略select name, concat('/', dept_i, dept_ii) from t_user-- 拼接字段值, 默认逗号分隔, 可以使用 separator 指定分隔符sele原创 2021-12-23 21:35:28 · 1098 阅读 · 0 评论 -
mysql 如何把小数转为百分比, 并保留 2 位小数
这里以 2 除以 5 为例, 实际场景可能是两个表字段select concat(truncate((2 / 5) * 100, 2), '%')原创 2021-12-22 01:36:41 · 2824 阅读 · 0 评论 -
数据库索引是什么
用于数据库快速查找记录的数据结构, 包含一列或多列的有序数据存储结构原创 2021-12-06 03:09:32 · 774 阅读 · 0 评论 -
mysql 索引失效的情况
where 条件等号左侧使用函数 is nullnot inor 隐式数据类型转换隐式字符集转换 like 左模糊匹配原创 2021-11-14 11:57:22 · 376 阅读 · 0 评论 -
myisam 和 innodb 区别
innodb 支持事务 / 行级锁 / 外键, myisam 不支持事务 / 行级锁 / 外键 innodb count 来自计算, myisam 会单独存储 count 值 innodb 主键索引是聚簇索引, 索引和数据在一起; myisam 主键索引是非聚簇索引, 索引和数据分开...原创 2021-10-30 14:44:44 · 113 阅读 · 0 评论 -
mysql 的 redolog undolog 区别
undolog 用于记录事务开始前的数据, 当事务需要回滚时, mysql 引擎会根据 undolog 回滚数据 redolog 用于防止数据丢失, 数据首先更新到内存的 buffer pool, 然后才会落到磁盘, 如果此时服务重启或者断电, 会读取 redolog, 避免数据丢失...原创 2021-10-25 19:44:57 · 257 阅读 · 0 评论 -
mysql 可重复读是否解决了幻读
解决了读的幻读, 没有解决写的幻读如果想要解决幻读, 需要使用串行化的隔离级别, 不过效率太低. 我们也是可以接受幻读的原创 2021-10-20 00:19:53 · 244 阅读 · 0 评论 -
mysql 查询未来 7 天内的数据
这里以 end_time 字段举例, 查询结束时间在未来 7 天内的, 包含今天select * from tb_test_info where test_status = 1 and date(end_time) >= curdate() and date(end_time) <= date_add(curdate(), interval 7 day)原创 2021-10-08 19:11:46 · 1037 阅读 · 0 评论 -
mysql 如果对记录修改, 是否会读到修改的值
mysql 如果对记录修改, 是否会读到修改的值会的, 如果判断数据没变, 则不会真正执行更新操作原创 2021-10-03 10:39:40 · 338 阅读 · 0 评论 -
B+ 树和 B 树区别
B+ 树是 B 树的变形B+ 树只在叶子节点上存储数据, 非叶子节点只具有索引功能, 这样可以减少随机 io 操作B+ 树叶子节点之间链表连接, 是双向链表, 具有很好的范围查找功能原创 2021-10-02 13:13:32 · 72 阅读 · 0 评论 -
mysql 的 delete 是直接删除某些记录吗
mysql 的 delete 是直接删除某些记录吗不是. delete 只是对数据做了删除标记, 之后异步线程会定时对数据做真实删除, 这么做的考虑是为了性能, 减少 io 操作.原创 2021-10-02 00:04:47 · 285 阅读 · 0 评论 -
mysql where 查询条件值末尾包含空格的情况
今天在开发过程中, 参数末尾多传了空格, 可是数据值并没有空格, 这让人很困惑.后来查了文档, 才发现, 原来在 sql 语法规范里, 字段值末尾包含空格时, 会自动删除这些空格, 再去数据库检索. 并且注意这种特殊情况只是针对末尾有空格的, 如果是开头有空格, 并不会自动删除// 会查出来数据select * from uacs_user where account = 'liuchao ';// 会查出来数据select * from uacs_user where account = 'li原创 2021-09-30 19:26:28 · 1208 阅读 · 0 评论 -
mysql 深度翻页如何解决
深度翻页一张 200w 的表, 每页 100 条数据, 想要获取第 19999 页的数据, 耗时 1.317sselect * from t_person limit 1999801, 100;查询性能会很差, 因为 limit 的原理是查询前 1999900 条数据, 并丢弃前 1999800 条数据, 剩余后面 100 条数据返回这里有两种方式id 自增 (要确保展示的数据 id 是连续的才行) 0.012sselect * from t_person where id >原创 2021-07-25 01:09:56 · 695 阅读 · 0 评论 -
如何设计用户权限功能
用户表角色表菜单表用户关联角色表角色关联菜单表使用这 5 张表实现简单的用户权限功能create table `b_user` ( `id` bigint unsigned not null auto_increment comment '唯一标识', `name` varchar(32) not null comment '姓名', `mobile` varchar(32) not null comment '手机号', `email` varchar(64)原创 2021-07-11 22:36:58 · 377 阅读 · 0 评论 -
一条 sql 的执行过程
数据库连接权限缓存分析器优化器执行器访问存储引擎读写数据原创 2020-09-27 21:26:38 · 59 阅读 · 0 评论 -
truncate table 和 delete from 区别
语法不同. delete from 表名 后面可以跟 where 从句, truncate table 表名. 是固定写法, 后面不能跟其他从句影响自增 id. truncate table 会清空表, 并且重置自增 id 为 1, 而 delete from 表, 不影响维护的自增 id 当前偏移量...原创 2020-12-29 23:18:57 · 688 阅读 · 0 评论 -
MySQL 中 group by 和 distinct 区别
group by 表示分组, distinct 表示去重, 确保所有 select 出来的字段值组合不重复单纯去重可以考虑 distinct, 如果需要聚合统计, 那么需要使用 group by, 支持聚合函数, 例如 max(), avg(), sum()原创 2020-11-01 00:28:40 · 567 阅读 · 0 评论 -
MySQL 中 union 和 union all 区别
union 会自动去重, 去重的标准是 select 的字段值都完全一致的记录行会自动去重union all 不会自动去重, 数据查询出来是什么, 结果就是什么原创 2020-10-31 00:11:50 · 183 阅读 · 0 评论 -
数据库的 ACID
A atomic 原子性. 事务要么全部提交, 要么全部回滚. 侧重于过程 C consistency 一致性. 数据要么是都更新为新数据, 要么都还原为旧数据. 侧重于结果 I isolation 隔离性, 事务之间有不可见型, 相互隔离 D duration 持久性. 事务提交后, 对数据的修改存于硬盘上, 是持久的...原创 2021-01-02 20:39:58 · 90 阅读 · 0 评论 -
数据库的脏读 不可重复读 幻读
脏读: 事务 A 读取到未提交事务 B 的数据变动 (insert /update/delete) 不可重复读: 事务 A 读取到已提交事务 B 的 update, 即前后读取数据的内容不一致幻读: 事务 A 读取到已提交事务 B 的 insert /delete原创 2021-01-01 23:39:58 · 104 阅读 · 0 评论 -
数据库三范式
字段值不可再拆分. 例如字段值存 1,2,3,4 这种不推荐, 正确做法是增加一张一对多的关联表, 存储关联数据. 好处是提高数据的灵活性, 可以使用 sql 实现复杂的关联查询有主键. 总是有 ID 的字段, 用来唯一标记每条数据使用外键. 作用是消除冗余, 减少数据的维护成本. 一般地我们推荐使用逻辑外键, 不需要显式设置数据库的物理外键约束...原创 2020-11-18 22:06:52 · 83 阅读 · 0 评论 -
mysql 如何实现条件更新
有的 sql 场景, 我们需要根据表中字段的不同去 set 对应的值这里需要用到的关键字是 case when then else end这样就可以实现不同的条件, 更新为不同的值update t_person set name = (case when dept_id = 1 then '张三' when dept_id = 2 then '李四' end ) where id in (1, 2)...原创 2021-01-12 20:12:46 · 1519 阅读 · 0 评论 -
mysql 主键和唯一键区别
主键和唯一键都是唯一的, 都支持联合字段, 即支持联合主键或联合唯一键主键是非空的, 唯一键的值可以为空每张表主键最多只能有一个, 唯一键可以有多个原创 2020-12-31 23:03:13 · 386 阅读 · 0 评论 -
mysql 如何复制表结构和数据
分库分表时, 需要提前创建好表结构这时可以使用下面的 sql-- 复制整个表结构, 包含索引. 不包含原表数据create table employee02 like employee01;如果需要复制数据到一张新表, 那么可以采用下面的 sql-- 插入原表数据到新表insert into employee02 select * from employee01;...原创 2020-12-30 21:46:16 · 370 阅读 · 0 评论 -
mysql 分页公式和总页数
pageNum 当前页pageSize 每页大小total 总记录行pageCount 总页数limit offset, row_countoffset = (pageNum - 1) * pageSizerow_count = pageSize总页数 pageCount = (total + pageSize - 1) /pageSize原创 2020-12-28 21:49:22 · 1381 阅读 · 0 评论 -
mysql 的连接查询
这里举例select a.* from a left join b on a.id = b.a_id内连接 inner join 取 a 和 b 的交集外连接左外连接 left (outer) join 主表数据会全部查出来, 从表数据可能为 null 右外连接 right (outer) join 主表数据可能为 null, 从表数据会全部查出来自连接 (连接自己)...原创 2020-12-27 21:49:50 · 71 阅读 · 0 评论 -
mysql 常用的聚合函数
sum() 数值求和avg() 数值求平均数count() 求数据数量min() 最小值max() 最大值注意点聚合函数会自动忽略值为 null 的字段可以加入 distinct 实现去重-- 查询人员表中关联的部门数, 去重结果select count(distinct dept_id) from t_person;...原创 2020-12-27 00:21:13 · 114 阅读 · 0 评论 -
mysql 常用字符串函数
mysql 内置常用函数# 字符串拼接# 输出 abcselect concat('a', 'b', 'c');# 字符串截取# 从第 2 个字符开始, 共截取 3 个字符# 输出 bcDselect substr('abcDEF', 2, 3);# 字符串去掉首尾空白符# 输出 abcDEFselect trim(' abcDEF ');# 字符串转为大写# 输出 ABCDEFselect upper('abcDEF');# 字符串向左填充, 同理向右填充是 rp原创 2020-12-26 00:38:06 · 87 阅读 · 1 评论 -
mysql 中的 + 符号
+ 在 mysql 中表示数值运算, 不表示 字符串拼接# 普通数值运算# 结果 2select 1 + 1;# 字符串类型会尝试转为数值类型# 结果 124select 1 + '123';# 字符串类型如果转换数值类型失败, 默认赋值 0# 结果 1select 1 + 'abc';# 任何数值与 null 计算都是 null# 结果 nullselect null + 1;其他: 如果想用字符串拼接, 需要使用 concat() 函数...原创 2020-12-24 22:11:57 · 529 阅读 · 0 评论 -
mysql 事务隔离级别
未提交读提交读可重复读 (默认) 序列化原创 2020-07-19 00:19:27 · 80 阅读 · 0 评论 -
mysql 服务器重启,自增 id 会被重置吗
两种数据库引擎有不同表现InnoDB8.0 版本之前, 自增 id 保存在内存中, 重启后会丢失, 下次自增 id 会取表中最大 id + 18.0 版本之后, 自增 id 保存在 redo log 中, 重启后不会丢失MyISAM自增 id 总是保存在内存中, 不区分数据库版本, 重启后不会丢失...原创 2021-03-19 21:44:58 · 1643 阅读 · 2 评论