![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sql
sql遇到的一些问题以及自己的一些研究
liuhuapeng0304
00后Java工程狮一枚,喜欢瞎琢磨
展开
-
Creating index ‘PRIMARY‘ required more than ‘innodb_online_alter_log_max_size‘ bytes of modification
看字面意思是,innodb临时文件空间不够了。自己又去百度了一下,发现可以调整这个空间。今天对一个两亿数据的表进行新增字段的时候报错。原创 2024-06-19 10:08:04 · 936 阅读 · 0 评论 -
mysql null值相减还是null
最好在设计表的时候就考虑默认值。方便后续管理维护 减少不必要的麻烦。原创 2024-03-27 10:11:11 · 291 阅读 · 0 评论 -
MySQL:字符串中的数字、英文字符、汉字提取 Num_char_extract函数
Num_char_extract(字段名,取值类型),取值类型说明:0=只取数字,1=只取字母,2=数字+字母,3=只取汉字。现在我需要取出来这个字段的字母部分。以下是表里有特殊字符的这个字符串。可以看到是只截取了字母部分。原创 2023-10-27 16:30:28 · 1363 阅读 · 0 评论 -
MySQL 中 不等于 会过滤掉 Null 的问题
写了个sql ,!= 某个字符串 但是空值也被过滤掉了、。因为 NULL 不是一个「值」,而是「没有值」。原创 2023-10-12 17:23:11 · 401 阅读 · 0 评论 -
left join on 后and 和 where 的区别
如果是on后的条件筛选,则左边的表行都会在结果集如果是where后的条件筛选,会对整个结果集进行筛选。原创 2023-07-31 14:15:51 · 1297 阅读 · 0 评论 -
MySQL insert ignore into的坑
公司有个需求,场景是存在则忽略掉该条数据,否则写入表。第一反应是用MySQL的insert ignore into。可以发现,如果设定的唯一索引的字段是null的话,第二次写入还是null,mysql不会按照重复insert处理。不知道是不是我的处理有问题,但是根据我后来排查数据发现,MySQL就只有这几条是重复的。sql语句是这样的,就是按照mysql的ignore insert写法。首先,你得确认插入的时候,vlaue语法后面的几个字段必须是。这个是我测试用的表,可以看到这三个字段是联合唯一索引。原创 2023-06-25 14:55:43 · 2781 阅读 · 1 评论 -
MySQL增加新的分区
【代码】MySQL增加新的分区。原创 2022-09-06 14:33:45 · 7976 阅读 · 0 评论 -
MySQL创建分区报错
解决:分区不能单独创建,在建表的时候就要创建一个分区表。第二种:ERROR 1564 (HY000): This partition function is not allowed 分区不支持此函数。第三种:ERROR 1067 (42000): Invalid default value for ‘create_time’ 时间默认值不正确解决:时间如果用datetime类型 不需要default 默认值。解决:因为我用的datetime 我的列值是create_time ,在partition p1 v原创 2022-06-13 14:39:25 · 4007 阅读 · 0 评论 -
MySQL分区
使用及说明:1、分区的字段,必须是表上所有的唯一索引(或者主键索引)包含的字段的子集2、range分区:分区字段必须是整型或者转换为整型,按照字段的区间划分数据的归属,典型的就是按照时间维度的月份分区操作步骤:一亿条数据注:mysql分区实现需要分区键需要与主键联合。...原创 2022-06-13 14:34:43 · 5853 阅读 · 0 评论 -
MySQL怎么用分隔符分隔字符串
使用可以使用如下函数SUBSTRING_INDEX( i.final_car_type, ’ ', 1 )i.final_car_type 即 需要分隔的字符串’ ’ 即 用空格分隔该字符串1 即:取出该空格之前的所有字符也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容。相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容效果如果count 是1表里数据:东风风神全新AX7马赫版 DF 21(天窗版)拆分后:东风风神全新AX7马原创 2022-05-07 11:04:02 · 3903 阅读 · 0 评论 -
MySQL已有数据存在则不插入,否则则修改
问题经常遇到这样的情景,向一个表里插入一条数据,如果已经存在就更新一下,用程序实现麻烦而且在并发的时候可能会有问题,这时用mysql的DUPLICATE KEY 很方便用法INSERT INTO agent_user (group_id,group_type,user_name, user_mobile,created_time,updated_time)SELECT 9503,8,a.user_name,a.user_mobile,1642397508000,1642397508000from原创 2022-01-20 10:59:31 · 2097 阅读 · 0 评论 -
MySQL查询当月时间的数据,time是时间戳类型
MySQL查询当月的数据,时间戳类型SELECT *FROM TABLE aWHERE date_format(from_unixtime(a.created_time / 1000),'%Y-%m') = date_format(now(), '%Y-%m')原创 2021-11-25 10:11:23 · 1285 阅读 · 0 评论 -
MySQL时间戳转换
表里的时间:1634021288917转换后:2021-10-12 14:48:09方法:select FROM_UNIXTIME(t.updated_time/1000,’%Y-%m-%d %H:%i:%s’) from table t order by t.updated_time desc原创 2021-10-12 15:56:40 · 758 阅读 · 0 评论 -
MySQL调优
1.MySQL缓存一般生产会开启MySQL缓存,大概原理是:第一次查询后会放到缓存,如果第二次相同的SQL进来,会走缓存。如果长时间不运行这条SQL,就会清掉缓存。通过以下命令查看是否开启缓存show variables like ‘%query_cache%’;调优的话,一般建议把生产的数据库导出一份到本地,在本地新建表来调优。原因有以下两点:1.保证生产的稳定性;2:本地的缓存默认是关闭的,可以更好实现(当然你也可以选择生产不走缓存来查询);3:本地的权限更大,可以随便修改索引。2.查看原创 2021-09-28 17:00:11 · 306 阅读 · 0 评论 -
MySQL数据库使用规范
1、数据库用小写字母+下划线命名,不允许驼峰式命名法,通常的命名规则为主业务前缀(如jld), 存储主要业务数据名称(如car),后缀为db,如jld_car_db表示加里敦车型库2、每个数据库有自己的独立三级域名,在程序及运维配置中通过该域名进行访问,禁止使用ip进行访问, 域名命名规则为数据库名+主从类型+jldcorp.com,示例:jld_car_db.master.jldcorp.com3、数据库采用utf8mb4字符集4、数据表、数据字段必须添加中文注释5、数据库存储货币采用分作原创 2021-09-27 13:53:09 · 791 阅读 · 0 评论 -
PGSQL to_date转换年月日时分秒发现格式不对
场景:oracle 用to_date函数,可以正确转换成年月日时分秒的格式select to_date('2021-09-15 15:18:13','yyyy-mm-dd hh24:mi:ss') from table查询到的结果 2021/09/16 星期四 15:18:13如果是PG的话,查询到的结果 2021-09-16可能会影响系统根据时间维度统计的数据结果。PG应该处理如下select to_timestamp('2021-09-15 15:18:13','yyyy-mm-原创 2021-09-16 15:24:15 · 11550 阅读 · 2 评论 -
PGSQL根据中文A-Z Z-A 排名
例如:根据姓名A-Z排序 order by convert_to(real_name,'GBK')Z-A desc即可原创 2021-08-25 18:28:58 · 1767 阅读 · 0 评论 -
pg shardingJDBC 单库水平分表
数据源:Druid数据库:PGSQL配置如下:# sharding-jdbc 水平分表策略# 配置数据源,给数据源起别名spring.shardingsphere.datasource.names=m1# 一个实体类对应两张表,覆盖spring.main.allow-bean-definition-overriding=true# 配置数据源的具体内容,包含连接池,驱动,地址,用户名,密码spring.shardingsphere.datasource.m1.type=com.alib原创 2021-08-24 09:31:25 · 1105 阅读 · 0 评论 -
pg库怎么设置主键自增?
方法一:create table test_a (id serial,name character varying(128),constraint pk_test_a_id primary key( id));方法二:create table test_b(id serial PRIMARY KEY,name character varying(128));这两种方法用的是pg的serial类型实现自增,drop表的时候指定的序列也会drop掉方法三:先创建主键表cre.原创 2021-04-26 15:10:19 · 11816 阅读 · 0 评论 -
PG库修改某个表的字段名
更换字段名alter table 表名 rename column 字段名 to 新字段名;更换表名alter table 表名 rename to 新表名;原创 2021-04-23 14:10:45 · 9753 阅读 · 0 评论 -
sql去除某个字段的空格
字符前的空格,用ltrim(string)字符后的空格,用rtrim(string)字符中的空格,用replace(string, ’ ', ’ ')update student set NAME=rtrim(NAME)update student set NAME=ltrim(NAME)update student set NAME=replace(NAME,’ ‘,’’)...原创 2021-03-02 09:48:56 · 6277 阅读 · 0 评论 -
MySQL的binLog、redoLog、undoLog是什么?
binlog1.什么是binlog?binlog记录了数据库表结构和表数据变更,比如update/delete/insert/truncate/create。它不会记录select(因为这没有对表没有进行变更)2.binlog一般用来做什么?主要有两个作用:复制和恢复数据MySQL在公司使用的时候往往都是一主多从结构的,从服务器需要与主服务器的数据保持一致,这就是通过binlog来实现的数据库的数据被干掉了,我们可以通过binlog来对数据进行恢复。因为binlog记录了数据库表的变更原创 2021-02-19 10:10:54 · 2170 阅读 · 1 评论 -
Oracle、PGSQL怎么快速备份表?
使用场景:针对历史数据特别处理,又担心历史数据处理机制有问题,需要备份历史数据。一、备份表及其表数据:create table sec_role_20201224 as select * from sec_role;二、只复制表结构,不复制数据:create talbe sec_role_20201224 as select * from sec_role where 1=0;...原创 2020-12-24 13:58:31 · 3141 阅读 · 0 评论 -
sum()函数和count()函数的区别
sum()函数和count()函数的区别:1)求和用累加sum(),求行的个数用累计count()2)数据库中对空值的处理:sum()不计算,count()认为没有此项;示例:SUM是对符合条件的记录的数值列求和COUNT 是对查询中符合条件的结果(或记录)的个数例如:表 fruitid name price1 apple 3.002 pear 4.00select count(price) from fruit原创 2020-11-12 10:09:12 · 4582 阅读 · 0 评论 -
Oracle中加号和连接的使用
1、左外连接(Left outer join/ left join)left join是以左表的记录为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL.用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。例子:select a.*,b.bname from student_drb a, class_drb b where a.bno=b.bno(+) -----原创 2020-09-09 14:48:11 · 2761 阅读 · 1 评论 -
Oracle的wm_concat函数对应postgresql的什么函数?
wm_concat(name) string_agg(name, ',')原创 2020-08-17 13:42:03 · 3755 阅读 · 0 评论 -
Oracle数据库Date类型字段取出后生成一个月后的时间
最近小刘在Java的学习道路上遇到了,一个问题:oracle存储的inputTime是date型,但是不规范,是“2020-3-27 14:04:52”这种的。但是需求要求转成正常的“2020-03-27 14:04:52”。并且在这个时间的基础上往后生成一个月的时间。在思索之下,我想到了两种办法:1.直接SQL查询生成select to_char(p.input_time + interval ‘1’ month,‘yyyy-MM-dd hh24:mm:ss’) inputTime from p原创 2020-08-06 13:57:45 · 2549 阅读 · 0 评论 -
Mac 安装及配置mysql
1.下载mysql官网:下载后缀为dmg即可2.安装:直接next一路到底注意:这里会让你输入一个8位的密码,我的一般是12345678安装完后:如下图 在Mac偏好设置里可以看到mysql3.安装navicat自己网上找的一个下载网址,用蓝奏云盘下载即可4.新建连接密码就是当时自己创建时候的密码5.测试连接这里,就安装以及配置结束了。...原创 2020-06-02 18:22:02 · 3974 阅读 · 0 评论 -
PG库关于timeStamp型接收
sql中的timestamp型,经过mybatis后会变成long型可以通过实体类定义为String型来接收,时间就可以正常显示了原创 2020-05-29 10:25:25 · 3754 阅读 · 0 评论