当前位置: 首页 > news >正文

数据库相关操作

数据库相关操作

  • Redis
    • Key(键)操作
  • MySQL
    • 查看表已有索引
    • 创建/删除索引
    • 是否命中索引
  • Oracle
    • 备份/恢复/删除表
    • REGEXP_SUBSTR
    • INSTR(string, substring)
    • ROWNUM
    • DBMS_RANDOM.VALUE()
    • 判空
    • 两个日期间隔

Redis

Key(键)操作

命令描述例子
DEL key删除指定键(支持多键,如 DEL key1 key2 )DEL sys_dict:hangup_cause (删除指定键)
KEYS pattern按模式匹配查询键(* 通配符,如 sys_dict:* )KEYS sys_dict:* (查所有 sys_dict: 开头的键 )

MySQL

查看表已有索引

SHOW INDEX FROM `表名` IN `数据库名`;

结果说明

Key_name:索引名称(PRIMARY 为主键索引)。

Column_name:索引包含的列名。

Non_unique:是否为非唯一索引(0 表示唯一索引,1 表示非唯一索引)。

Index_type:索引类型(如 BTREE、HASH 等)。

创建/删除索引

-- 创建索引
CREATE INDEX idx_record ON record (from_user,    -- 优先放置等值查询或前缀模糊查询的字段start_time DESC,  -- 范围查询 + 排序字段(DESC 与 ORDER BY 一致)end_time          -- 若查询中需要过滤 end_time,可加入索引(但范围查询后字段无法再利用索引)
);
-- 删除索引
DROP INDEX idx_record ON record;

是否命中索引

EXPLAIN SELECT ...  -- 你的原始查询语句

结果说明

key:实际使用的索引。若为NULL则表示未使用索引

possible_keys :可能使用的索引列表

type 连接类型,常见值:

  • ALL:全表扫描(未命中索引)
  • index:索引扫描
  • range:范围扫描(如LIKE ‘abc%’)
  • ref:使用非唯一索引查找

Extra额外信息,常见值:

  • Using index:使用了覆盖索引(性能最佳)
  • Using where:使用了 WHERE 过滤
  • Using filesort:需要文件排序(性能较差)

Oracle

备份/恢复/删除表

--备份
CREATE TABLE table_t_backup AS
SELECT * 
FROM table_t
WHERE t_flag = 0
AND t_CODE IN('8AP57','8AP51');
--恢复
MERGE INTO table_t t
USING table_t_backup s
ON (t.ID = s.ID)
WHEN MATCHED THENUPDATE SET t.NUMBER = s.NUMBER,t.PAPT_NUMBER = s.PAPT_NUMBER,
AND s.CODE IN('8AP57','8AP51');
--删除
DROP TABLE table_t_backup

REGEXP_SUBSTR

从字符串中提取与正则表达式匹配的子串

REGEXP_SUBSTR(source_string,  -- 源字符串(必填)pattern,        -- 正则表达式模式(必填)[position],     -- 开始搜索的位置(可选,默认 1,支持负数从右向左)[occurrence],   -- 匹配第几次出现的结果(可选,默认 1)[match_param],  -- 匹配参数(可选,控制大小写、换行等)[subexpression] -- 提取第几个子匹配项(可选,默认 0 表示整个匹配)
)
参数描述
source_string要搜索的字符串,可以是列名或字符串字面量
pattern正则表达式模式,支持标准正则语法(如 \d、*、+ 等)
position搜索起始位置: - 正数:从左到右第 position 个字符开始(默认 1)
- 负数:从右到左第 abs(position) 个字符开始
occurrence指定返回第几次匹配的结果,默认为 1(第一次匹配)
match_param匹配参数(可选,多个参数可组合使用): ‘i’:不区分大小写
‘c’:区分大小写(默认)
‘n’:允许 . 匹配换行符
‘m’:多行模式(^ 和 $ 匹配行首尾)
‘x’:忽略模式中的空白字符 null
subexpression提取正则表达式中第 n 个括号内的子匹配项(()):
0:返回整个匹配结果(默认)
1:返回第 1 个括号内的子串
2:返回第 2 个括号内的子串,依此类推
SELECT REGEXP_SUBSTR('user@example.com', '^([^@]+)') AS username FROM DUAL;
-- 正则解析:^([^@]+) 表示以非 @ 字符开头的第一个子串
-- 输出:user

INSTR(string, substring)

Oracle 的内置函数,用于查找 substring 在 string 中首次出现的位置。如果找到,返回位置索引(从 1 开始);如果未找到,返回 0。

一个字符串含多个符号时,只返回第一个的位置

INSTR(‘ABC-DEF’, ‘-’) → 返回 4(连字符 - 在第 4 个位置)

INSTR(‘ABCDEF’, ‘-’) → 返回 0(没有连字符)

WHERE INSTR(HARDWARE_NUMBER, '-') > 0

结果:这个条件等价于 “字段中包含 -”

WHERE INSTR(ms.SOFTWARE_NUMBER, '-', INSTR(ms.SOFTWARE_NUMBER, '-') + 1) > 0

结果:判断字段中是否至少包含两个 -

ROWNUM

ROWNUM是 Oracle 的行号伪列,用于标识结果集中的行顺序

ROWNUM必须在结果集生成后才能使用,故必须用子查询

SELECT *
FROM (SELECT * FROM t_table 
)
WHERE ROWNUM <= 20;

结果:返回的是满足条件的前 20 行,但顺序是未定义的(通常按数据在磁盘中的物理存储顺序,或索引顺序)

DBMS_RANDOM.VALUE()

DBMS_RANDOM.VALUE() 是 Oracle 内置函数,会为结果集中的每一行生成一个随机数。

按这些随机数排序后,结果集就会呈现随机排列的状态。

SELECT *
FROM (SELECT * FROM INVOKE_LOGORDER BY DBMS_RANDOM.VALUE()
)
WHERE ROWNUM <= 20;

结果:随机前20条数据

判空

AND (ms.ECU_PAPT_NUMBER IS NULL OR ms.ECU_PAPT_NUMBER = '')

两个日期间隔

SELECT * 
FROM LOG pl 
WHERE pl.NAME = 'add' AND pl.TIME BETWEEN TO_DATE('2021-09-06 00:00:00', 'YYYY-MM-DD HH24:MI:SS')AND TO_DATE('2025-09-06 23:59:59', 'YYYY-MM-DD HH24:MI:SS')

相关文章:

  • YOLOv11改进 | Conv/卷积篇 | 2024最新ECCV最新大感受野的小波卷积WTConv助力YOLOv11有效涨点(二次创新C3k2)
  • XXX2024073105:纪念品分组【c++】
  • 关于layui select option莫名多一行的问题
  • NodeJS哪些情况下会造成内存泄漏和避免方法
  • 建造者模式Builder Pattern
  • LeetCode HOT 100
  • ShenNiusModularity项目源码学习(34:总结)
  • 每日学习一道数模题-2024国赛E题-交通流量管控
  • React19源码系列之Hooks(useState)
  • C++ 类的知识点
  • 【Docker 05】Container - 容器
  • Spring AI的ChatClient和ChatModel接口
  • Node.js 中的 Token 认证机制详解
  • 动态规划之斐波那契数(一)
  • java 集合 泛型
  • (LeetCode 每日一题) 1432. 改变一个整数能得到的最大差值(贪心)
  • 编译链接实战(30)strip移除了哪些内容
  • JVM 类加载过程/对象创建过程/双亲委派机制/垃圾回收机制
  • 大模型微调(Fine-tuning)概览
  • Vue-Leaflet地图组件开发(四)高级功能与深度优化探索
  • 做网站容易吗/百度搜索引擎的特点
  • 做网站实名认证有什么用/seo也成搜索引擎优化
  • wordpress 整站下载/发布
  • 免费网站的app/优化算法
  • 新网站建设总结/南宁网站seo
  • 易县有没有z做网站的/网站推广引流