MySQL企业开发中高频使用语句

news/2025/2/28 0:03:24/

以下是企业级MySQL开发中高频使用的语句分类及示例,结合典型业务场景说明:


一、数据定义(DDL)

  1. 表结构管理

    -- 创建用户表(含索引优化)
    CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL COMMENT '用户名',email VARCHAR(100) UNIQUE COMMENT '邮箱',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    

    用途:定义核心业务表结构,包含主键、约束和存储引擎选择

  2. 动态修改表结构

    -- 添加索引与字段扩展 
    ALTER TABLE user ADD INDEX idx_name (name),ADD COLUMN phone VARCHAR(20) AFTER email;
    

    场景:应对业务需求变更时的快速表结构调整


二、数据操作(DML)

  1. 批量插入与更新

    -- 从临时表导入数据 
    INSERT INTO order_detail (product_id, quantity)
    SELECT product_id, SUM(qty) FROM temp_order GROUP BY product_id;-- 关联更新用户状态 
    UPDATE user u 
    JOIN user_status s ON u.id = s.user_id 
    SET u.is_active = 1 
    WHERE s.last_login > '2025-01-01';
    

    用途:数据迁移与批量业务状态更新

  2. 条件删除

    -- 清理无效数据 
    DELETE FROM log 
    WHERE created_at < '2024-01-01' 
    LIMIT 1000;
    

    优化点:限制删除条数防止事务锁表


三、数据查询(DQL)

  1. 多表关联与聚合

    -- 统计部门销售额 
    SELECT d.dept_name, SUM(o.amount) AS total_sales 
    FROM department d 
    LEFT JOIN orders o ON d.id = o.dept_id 
    GROUP BY d.dept_name 
    HAVING total_sales > 100000;
    

    场景:生成业务报表

  2. 分页优化查询

    -- 使用覆盖索引加速分页 
    SELECT id, name 
    FROM user 
    WHERE created_at > '2025-01-01'
    ORDER BY id DESC 
    LIMIT 100000, 20;
    

    技巧:避免OFFSET过大导致性能问题


四、权限与安全管理

  1. 用户权限控制

    -- 创建只读账户 
    CREATE USER 'report_user'@'%' IDENTIFIED BY 'SecurePass123!';
    GRANT SELECT ON sales_db.* TO 'report_user'@'%';
    FLUSH PRIVILEGES;
    

    安全实践:最小权限原则

  2. 密码策略更新

    -- 修改用户密码并设置过期 
    ALTER USER 'admin'@'localhost' IDENTIFIED BY 'NewPass!2025' PASSWORD EXPIRE INTERVAL 90 DAY;
    

    合规要求:满足企业安全审计标准


五、高级处理

  1. 数据聚合与格式转换

    -- 将多行合并为字符串(如标签系统)
    SELECT product_id, GROUP_CONCAT(category_name SEPARATOR '|') AS categories 
    FROM product_category 
    GROUP BY product_id;
    

    应用场景:前端展示或数据导出

  2. 事务控制

    START TRANSACTION;
    UPDATE account SET balance = balance - 500 WHERE user_id = 1001;
    UPDATE account SET balance = balance + 500 WHERE user_id = 1002;
    COMMIT;
    

    关键点:保证金融类业务原子性


高频优化技巧

  • 索引分析:EXPLAIN SELECT ... 查看执行计划
  • 慢查询日志:SET GLOBAL slow_query_log = ON;
  • 连接池配置:SHOW STATUS LIKE 'Threads_connected';

http://www.ppmy.cn/news/1575373.html

相关文章

钉钉合同审批对接腾讯电子签,实现合同全流程自动化管理

雏森科技&#xff1a;钉钉审批对接腾讯电子签&#xff0c;实现合同全流程自动化管理 在数字化转型的浪潮中&#xff0c;企业对于高效、安全的合同管理需求日益增长。传统的合同审批和签署流程往往繁琐且耗时&#xff0c;不仅降低了工作效率&#xff0c;还可能因人为疏忽导致法…

深入浅出深度学习中的BatchSize

一、Batch Size 的核心作用 Batch Size 决定了模型每次更新参数时使用的样本数量。直接影响以下方面&#xff1a; 梯度计算的准确性&#xff1a; 大 Batch 的梯度是多个样本的平均&#xff0c;更接近“真实梯度”&#xff08;整个数据集的梯度方向&#xff09;。小 Batch 的梯…

Express + MongoDB 实现更新用户时用户名变化验证数据库是否存在,不变不验证

User.findById()&#xff1a;方法根据用户 ID 查找当前用户的信息&#xff0c;若用户不存在则返回 404 错误。 User.findOne()&#xff1a;方法检查新用户名是否已存在于数据库中。 User.findByIdAndUpdate()&#xff1a;方法更新用户信息&#xff0c;new: true 表示返回更新后…

登录逻辑结合redis

1. 用户登录 用户访问登录页面&#xff0c;输入用户名和密码&#xff0c;提交表单。 服务端验证用户名和密码&#xff1a; 如果验证成功&#xff0c;生成 ticket&#xff0c;并将 ticket 和用户 ID 存储在缓存中&#xff08;如 Redis&#xff09;。 将 ticket 放入 Cookie 中…

LeetCode 贪心算法经典题目 (C++实现)

121. 买卖股票的最佳时机 题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返…

OpenCV开源机器视觉软件

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于实时图像处理、视频分析、物体检测、人脸识别等领域。它由英特尔实验室于1999年发起,现已成为计算机视觉领域最流行的工具之一,支持多种编程语言(如C++、Python、Java)和…

深度学习-131-RAG技术之基于Anything LLM搭建本地私人知识库的应用策略问题总结(二)

文章目录 1 AnythingLLM是如何工作的2 AnythingLLM中的几个关键参数和配置2.1 分块处理2.2 Embedding嵌入模型2.3 TopK检索召回2.4 LLM 大模型首选项2.5 减少幻觉的设定技巧3 告别幻觉和睁眼说瞎话3.1 关键原则3.2 关键机理剖析3.2.1 Pin固定的含义3.2.2 Chunk Size与向量数Vec…

2024/2/23 考试

第一题 One Clue 问题陈述 在数轴上有20000012000001块石头&#xff0c;这些石头的坐标分别为-1000000, -999999, -999998, \ldots, 999999, 1000000−1000000,−999999,−999998,…,999999,1000000。 其中&#xff0c;连续的KK块石头被涂成了黑色&#xff0c;其余的则是白…