MYSQL-------正则表达式的使用

正则表达式的使用

  • 基本语法 :

    • REGEXP 或 RLIKE 关键字用于在 MySQL 中使用正则表达式。
    sql 复制代码
    SELECT column FROM table WHERE column REGEXP 'pattern';
    • 例如,查找 email 列中以 @example.com 结尾的记录:
    sql 复制代码
    SELECT email FROM users WHERE email REGEXP '@example.com$';

代码解释:

  • REGEXP 或 RLIKE 后面的 'pattern' 是正则表达式模式。
  • '@example.com$' 中的 $ 表示以 @example.com 结尾,这样可以筛选出符合该模式的 email 记录。

巧用 RAND() 提取随机行

  • 随机提取一行数据 :

    sql 复制代码
    SELECT column FROM table ORDER BY RAND() LIMIT 1;

代码解释:

  • RAND() 函数会为每一行生成一个随机数。
  • ORDER BY RAND() 会根据这些随机数对行进行排序。
  • LIMIT 1 只选取排序后的第一行,从而实现随机选取一行的目的。

利用 GROUP BY 和 WITH ROLLUP 子句做统计

  • 基本 GROUP BY 统计 :

    sql 复制代码
    SELECT column1, COUNT(column2) AS count FROM table GROUP BY column1;
    • 例如,统计每个部门的员工数量:
    sql 复制代码
    SELECT department, COUNT(employee_id) AS employee_count FROM employees GROUP BY department;

代码解释:

  • GROUP BY department 会将 employees 表中的数据按照 department 列分组。

  • COUNT(employee_id) 计算每个组中 employee_id 的数量,作为 employee_count 存储。

  • 使用 WITH ROLLUP 进行汇总统计:

    sql 复制代码
    SELECT column1, COUNT(column2) AS count FROM table GROUP BY column1 WITH ROLLUP;
    • 继续上面的例子,添加汇总统计:
    sql 复制代码
    SELECT department, COUNT(employee_id) AS employee_count FROM employees GROUP BY department WITH ROLLUP;

代码解释:

  • WITH ROLLUP 会在 GROUP BY 的基础上添加一个额外的汇总行,统计所有组的总和。在上述例子中,会添加一行显示所有部门员工总数。

用 BIT GROUP FUNCTIONS 做统计

  • BIT_AND、BIT_OR、BIT_XOR 函数的使用 :

    sql 复制代码
    SELECT BIT_AND(column) AS bit_and_result, BIT_OR(column) AS bit_or_result, BIT_XOR(column) AS bit_xor_result FROM table;
    • 例如,对 flags 列进行位运算统计:
    sql 复制代码
    SELECT BIT_AND(flags) AS bit_and_result, BIT_OR(flags) AS bit_or_result, BIT_XOR(flags) AS bit_xor_result FROM data;

代码解释:

  • BIT_AND(flags) 对 flags 列的每一行进行位与操作,结果存储在 bit_and_result 中。
  • BIT_OR(flags) 进行位或操作,存储在 bit_or_result 中。
  • BIT_XOR(flags) 进行位异或操作,存储在 bit_xor_result 中。

数据库名,表名大小写问题

  • 大小写敏感性 :

    • 在 Windows 系统上,MySQL 通常不区分数据库名和表名的大小写(取决于文件系统)。
    • 在 Linux 系统上,MySQL 默认区分大小写,这取决于文件系统和 MySQL 服务器的配置。
    • 为避免混淆,可以在创建数据库和表时统一使用小写,例如:
    sql 复制代码
    CREATE DATABASE mydatabase;
    CREATE TABLE mytable (id INT);

代码解释:

  • 上述代码创建了一个名为 mydatabase 的数据库和一个名为 mytable 的表,使用小写避免因大小写问题导致的混淆。

使用外键需要注意的问题

  • 创建外键 :

    sql 复制代码
    ALTER TABLE child_table
    ADD CONSTRAINT fk_name
    FOREIGN KEY (child_column) REFERENCES parent_table(parent_column);
    • 例如,在 orders 表和 customers 表之间建立外键:
    sql 复制代码
    ALTER TABLE orders
    ADD CONSTRAINT fk_customer_id
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

代码解释:

  • ALTER TABLE child_table 表示要修改的子表。

  • ADD CONSTRAINT fk_name 为外键添加一个约束,fk_name 是外键的名称。

  • FOREIGN KEY (child_column) REFERENCES parent_table(parent_column) 定义外键,child_column 是子表的列,它引用了 parent_table 中的 parent_column。

  • 注意事项:

    • 确保外键关联的列的数据类型和长度相同。
    • 外键所在的表(子表)和被引用的表(父表)使用相同的存储引擎。
    • 父表中的引用列通常需要有索引,以提高性能。
    • 外键会影响性能,尤其是在大量数据插入、更新和删除时,因为需要检查引用完整性。

小结

  • 正则表达式 :使用 REGEXP 或 RLIKE 可以方便地进行模式匹配,筛选出符合特定模式的数据。
  • RAND() 函数:可以用于随机选取数据,但对于大数据集性能可能不佳,因为它会对每一行计算随机数。
  • GROUP BY 和 WITH ROLLUP:可以方便地进行分组统计和汇总统计。
  • BIT GROUP FUNCTIONS:提供了对二进制数据的位运算统计功能。
  • 大小写问题:注意不同操作系统下的大小写敏感性,创建时尽量使用小写或遵循统一的命名规则。
  • 外键:合理使用外键可以保证数据完整性,但要注意其性能影响和使用的限制。

在使用这些 SQL

技巧和功能时,需要根据实际的业务需求和数据库环境来选择合适的方法,同时注意它们可能带来的性能和维护问题。对于外键,要谨慎使用,特别是在高并发和大数据量的场景下,要充分考虑性能影响和维护成本。在使用正则表达式时,确保模式的准确性和有效性,避免过度复杂的模式影响性能。

相关推荐
ss2732 分钟前
不用向量库,我用 MySQL 跑通了蔬菜 RAG--基于 RuoYi-AI 的蔬菜种植知识库 + 智能咨询系统,普通开发机就能跑
数据库·人工智能·智慧农业·ruoyi·知识库·rag
Franciz小测测28 分钟前
MySQL 增量备份实践:文件都在,为什么仍可能恢复失败?
数据库·mysql·binlog
2401_891409263 小时前
量化数据13:港股分钟K线、Level2逐笔Tick、十档盘口和港股通历史数据的批量提取
数据库
w-w0w-w10 小时前
SQL注入
网络·数据库·sql
tianyuanwo10 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼10 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL10 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶11 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河12 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士66612 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发