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

正则表达式的使用

  • 基本语法

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

代码解释

  • REGEXPRLIKE 后面的 '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

  • 注意事项

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

小结

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

在使用这些 SQL

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

相关推荐
月光水岸New5 分钟前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6756 分钟前
数据库基础1
数据库
我爱松子鱼10 分钟前
mysql之规则优化器RBO
数据库·mysql
chengooooooo35 分钟前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser2 小时前
【SQL】多表查询案例
数据库·sql
Galeoto2 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)2 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231112 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白2 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码2 小时前
【SQL实验】触发器
数据库·笔记·sql