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

网站都是程序员做的吗员工管理系统

网站都是程序员做的吗,员工管理系统,超酷个人网站欣赏,可以在线编程的网站大家好!今天我们要深入探讨 MySQL 中一些非常重要的高级主题——内置函数、视图、存储过程、触发器、索引、事务和锁机制。无论你是刚开始学习数据库的新手,还是经验丰富的开发者,掌握这些知识点都将极大提升你的开发效率和数据管理能力。一.…

大家好!今天我们要深入探讨 MySQL 中一些非常重要的高级主题——内置函数视图存储过程触发器索引事务锁机制。无论你是刚开始学习数据库的新手,还是经验丰富的开发者,掌握这些知识点都将极大提升你的开发效率和数据管理能力。


一. 内置函数

什么是内置函数?

内置函数 是 MySQL 提供的用于处理各种数据类型和计算需求的预定义函数。它们可以帮助我们简化复杂的操作,提高代码的可读性和执行效率。

核心内容:
  • 聚合函数
  • 数学函数
  • 字符串函数
  • 日期函数
  • 控制流函数
  • 窗口函数

1. 聚合函数

聚合函数用于对一组值进行计算并返回单个值。

-- 统计每个部门的员工数量
SELECT dept_id, COUNT(*) AS 员工数量 FROM employees GROUP BY dept_id;-- 连接每个部门的员工姓名,按部门(dept_id)对员工姓名进行分组拼接
SELECT dept_id, GROUP_CONCAT(name SEPARATOR ',') AS 员工姓名 FROM employees GROUP BY dept_id;

注意:

  • COUNT 统计数量。
  • GROUP_CONCAT 将多个值连接成一个字符串。

2. 数学函数

数学函数用于数值计算。

-- 绝对值
SELECT ABS(-10); -- 10-- 向上取整
SELECT CEIL(3.14); -- 4-- 四舍五入
SELECT ROUND(3.14159, 2); -- 3.14

注意:

  • ABS 返回绝对值。
  • CEIL 向上取整。
  • ROUND 四舍五入,可以指定保留小数位数。

3. 字符串函数

字符串函数用于处理字符串。

-- 连接字符串
SELECT CONCAT('Hello', ' World'); -- 'Hello World'-- 截取子字符串
SELECT SUBSTRING('MySQL', 1, 3); -- 'MyS'-- 替换字符串
SELECT REPLACE('MySQL', 'My', 'Your'); -- 'YourSQL'

注意:

  • CONCAT 连接多个字符串。
  • SUBSTRING 截取子字符串,起始位置从1开始。
  • REPLACE 替换字符串中的部分内容。

4. 日期函数

日期函数用于处理日期和时间。

-- 当前日期时间
SELECT NOW(); -- 例如:2023-11-11 12:34:56-- 日期加法
SELECT DATE_ADD('2023-11-11', INTERVAL 1 DAY); -- 2023-11-12-- 计算日期差
SELECT DATEDIFF('2023-11-11', '2023-10-01'); -- 41

注意:

  • NOW() 返回当前日期和时间。
  • DATE_ADD 和 DATE_SUB 分别用于日期加减。
  • DATEDIFF 计算两个日期之间的天数差。

5. 窗口函数

窗口函数用于计算基于一组行的聚合值,不会将多行压缩为一行。

-- 创建示例表
CREATE TABLE sales(id INT PRIMARY KEY COMMENT '员工ID,主键',employee VARCHAR(50) COMMENT '员工姓名',department VARCHAR(50) COMMENT '所属部门,如 Tech、Sales等',salary DECIMAL(10,2) COMMENT '薪资金额,单位:元',sale_date DATE COMMENT '销售记录日期'
);-- 插入示例数据
INSERT INTO sales VALUES 
(1, 'Alice', 'Tech', 7000, '2023-01-15'),
(2, 'Bob', 'Tech', 8000, '2023-02-20');-- 行号函数
SELECT employee, department, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM sales;

注意:

  • ROW_NUMBER() 为每行分配唯一的连续序号。
  • RANK() 和 DENSE_RANK() 用于排名,支持并列排名。
  • 可以使用 PARTITION BY 对结果进行分组。

二. 视图(Views)

什么是视图?

视图 是虚拟表,是基于查询结果的可视化表。它可以帮助我们简化复杂查询,限制数据访问,并提供数据独立性。

核心内容:
  • 创建视图
  • 修改视图
  • 更新视图
  • 删除视图

1. 创建视图

-- 创建视图
CREATE VIEW v_employee_dept AS 
SELECT e.id, e.name, d.name AS dept_name, e.salary 
FROM employees e 
INNER JOIN departments d ON e.dept_id = d.id;

2. 修改视图

-- 修改视图
CREATE OR REPLACE VIEW v_employee_dept AS 
SELECT e.id, e.name, d.name AS dept_name, e.salary, e.hire_date 
FROM employees e 
INNER JOIN departments d ON e.dept_id = d.id;

3. 更新视图

-- 更新视图
UPDATE v_employee_dept SET salary = 10000 WHERE name = '张三';

4. 删除视图

-- 删除视图
DROP VIEW v_employee_dept;

三. 存储过程、存储函数与触发器

什么是存储过程和存储函数?

存储过程 是一组预编译的 SQL 语句,保存在数据库中,可通过名称调用。存储函数 是返回值的存储过程,可以在 SQL 语句中调用。

核心内容:
  • 创建存储过程
  • 创建存储函数
  • 触发器

1. 创建存储过程

DELIMITER //
CREATE PROCEDURE get_employee_by_dept(IN dept_name VARCHAR(50))
BEGINSELECT e.id, e.name, e.salary FROM employees e INNER JOIN departments d ON e.dept_id = d.id WHERE d.name = dept_name;
END //
DELIMITER ;-- 调用存储过程
CALL get_employee_by_dept('技术部');

2. 创建存储函数

-- 设置全局参数
SET GLOBAL log_bin_trust_function_creators = TRUE;DELIMITER //
CREATE FUNCTION get_dept_avg_salary(dept_name VARCHAR(50)) RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGINDECLARE avg_sal DECIMAL(10,2);SELECT AVG(e.salary) INTO avg_sal FROM employees e INNER JOIN departments d ON e.dept_id = d.id WHERE d.name = dept_name;RETURN avg_sal;
END //
DELIMITER ;-- 调用存储函数
SELECT get_dept_avg_salary('技术部');

3. 触发器

触发器是在表上定义的特殊存储过程,当表发生 INSERTUPDATEDELETE 操作时自动执行。

-- 创建日志表
CREATE TABLE employee_log(id INT PRIMARY KEY AUTO_INCREMENT,operation VARCHAR(20),employee_id INT,operation_time DATETIME
);-- 创建触发器
DELIMITER //
CREATE TRIGGER after_employee_insert AFTER INSERT ON employees FOR EACH ROW
BEGININSERT INTO employee_log(operation, employee_id, operation_time)VALUES('INSERT', NEW.id, NOW());
END //
DELIMITER ;

四. 索引、存储引擎、事务与锁

什么是索引?

索引 是提高查询性能的重要手段,MySQL 支持多种索引类型,包括普通索引、唯一索引、主键索引、组合索引和全文索引。

-- 创建索引
CREATE INDEX idx_employee_name ON employees(name);-- 创建唯一索引
CREATE UNIQUE INDEX idx_employee_email ON employees(email);-- 查看索引
SHOW INDEX FROM employees;

1. 创建索引

-- 创建组合索引
CREATE INDEX idx_dept_salary ON employees(dept_id, salary);

2. 存储引擎

存储引擎是 MySQL 用于存储和管理数据的底层组件,常见的存储引擎有 InnoDB 和 MyISAM。

-- 创建 MyISAM 引擎的日志表
CREATE TABLE test_myisam(id INT PRIMARY KEY,name VARCHAR(50)
) ENGINE=MyISAM;

3. 事务

事务是一组原子性的 SQL 操作,要么全部执行成功,要么全部执行失败。事务具有 ACID 特性:原子性、一致性、隔离性和持久性。

-- 开始事务
START TRANSACTION;-- 执行操作
UPDATE employees SET salary = salary + 1000 WHERE dept_id = 1;
INSERT INTO employee_log(operation, employee_id, operation_time) 
VALUES ('SALARY_INCREASE', 1, NOW());-- 提交事务
COMMIT;

4. 锁机制

锁是 MySQL 用于并发控制的机制,分为表锁和行锁。

-- 表锁
LOCK TABLES employees WRITE;-- 行锁
SELECT * FROM employees WHERE id = 1 FOR UPDATE;

五. 性能优化

如何进行性能优化?

性能优化的步骤包括查看 SQL 执行频率、定位低效率执行 SQL、分析执行计划、优化索引和优化 SQL 语句。

核心内容:
  • 查看 SQL 执行频率
  • 定位低效率执行 SQL
  • 分析执行计划
  • 优化索引
  • 优化 SQL 语句

1. 查看 SQL 执行频率

-- 查看 SQL 执行频率
SHOW GLOBAL STATUS LIKE 'Com_%';

2. 定位低效率执行 SQL

-- 查看正在执行的慢查询
SHOW PROCESSLIST;

3. 分析执行计划

-- 分析执行计划
EXPLAIN SELECT * FROM employees WHERE dept_id = 1;

4. 优化索引

避免索引失效,选择合适的索引列,覆盖索引等策略。

-- 索引失效示例
SELECT * FROM employees WHERE YEAR(hire_date) = 2020; -- 索引失效-- 优化后
SELECT * FROM employees WHERE hire_date >= '2020-01-01' AND hire_date < '2021-01-01'; -- 索引有效

六. 总结与最佳实践

总结

功能说明
聚合函数对一组值进行计算并返回单个值
数学函数用于数值计算
字符串函数处理字符串
日期函数处理日期和时间
窗口函数计算基于一组行的聚合值
视图虚拟表,基于查询结果
存储过程预编译的 SQL 语句
存储函数返回值的存储过程
触发器自动执行的存储过程
索引提高查询性能
存储引擎数据存储和管理的底层组件
事务原子性的 SQL 操作
锁机制并发控制

 最佳实践

  • 合理使用内置函数:根据业务需求选择合适的函数。
  • 灵活运用视图:简化复杂查询,限制数据访问。
  • 优化存储过程和函数:提高代码的可维护性和执行效率。
  • 合理使用索引:避免索引失效,选择合适的索引列。
  • 事务和锁机制:确保数据的一致性和并发控制。

一句话总结:

MySQL 的高级特性和性能优化功能帮助我们构建高效、可靠的数据管理系统,让我们的应用更加健壮和高效。


结语

通过这篇博客,我们详细讲解了 MySQL 中高级特性和性能优化的核心概念和使用方法。无论你是刚刚开始学习数据库,还是已经在实际项目中应用,掌握这些知识点都能让你的数据管理更加得心应手。

http://www.dtcms.com/a/450603.html

相关文章:

  • wampserver做网站卖建材的网站
  • rule 概念及题目
  • 做国外网站有哪些广州企业网站建设哪家服务好
  • 深圳网站建设讯美网站建设维护管理
  • C++ 编译原理
  • 所得税 网站建设费建设银行假网站首页
  • 第十六届蓝桥杯大赛软件赛C/C++赛道题解
  • 电商网站建设实训步骤wordpress视频采集
  • 哪些网站是做快消品的肇庆cms建站系统
  • 网站建设小组五类成员成都大型商城网站建设
  • 郑州优化网站公司长春餐饮网站建设
  • seo专业培训网络班济南网络优化厂家
  • 申请网站多少钱工作职责怎么写
  • 做网站花都区包头网站设计推广
  • 数据埋点指南
  • 2025-10-06 Python不基础 11——if 判断
  • AI智能体升级实战:从规则匹配到Function Call,准确率提升86%的技术选型之路
  • 威联通nas 做网站湖州市南浔区建设局网站
  • C47-数组指针
  • 品牌网站建设咨询新产品上市推广策划方案
  • 男和男做的视频网站网站被攻击如何处理
  • 石家庄seo关键词网站推广优化怎样
  • 卓越建站快车南充建设企业网站
  • MySQL删除数据后表空间处理
  • 在线学习建设网站宁波易通建设网站
  • 济南网站制作企业设计网站的步骤有哪些
  • LeetCode:96.只出现一次的数字
  • 我国空间站建造西安做网站推广
  • 算法竞赛补题1
  • 网站优化设计公司百度小程序平台