欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 数据库相关操作

数据库相关操作

2025/6/16 10:58:16 来源:https://blog.csdn.net/qq_56610467/article/details/148569082  浏览:    关键词:数据库相关操作

数据库相关操作

  • 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')

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词