MySQL编程开发

变量

系统变量:MySQL内置变量

#查看所有系统变量

show variables \G;

#通过模糊查询筛选变量

show variables like "%path%";

全局变量:在所有终端中都生效;

会话变量:在当前会话(本次登录);

#可以通过set变量

临时修改全局变量(需权限)

set global max_connections = 200; 调整最大连接数为200

select @@max_connections;

临时修改会话变量(当前连接生效)

set session wait timeout = 3600; 调整超时时间为1小时

用户变量:用于临时存储,用户自己的数据,例如:Selectd的查询结果。

#用户变量,临时存储查询的结果

select username into @user name from users where id=1;

#也可以进行一些运算,被函数调用

局部变量:在存储过程内部定义变量,只在该存储过程内部有效。

触发器

触发器(Triggers)是当某个表在进行(update\insert\deletc)操作时,自动同步进行的关联操作。

例如:在对A表insert一条新的数据,B表会同步记录日志。

特性:确保数据的完整性,日志记录,数据校验等操作。

|-------------|-----------------------------------|
| 触发器类型 | NEW 和 OLD的使用 |
| INSERT 型触发器 | NEW 表示将要或者已经新增的数据 |
| UPDATE 型触发器 | OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据 |
| DELETE 型触发器 | OLD 表示将要或者已经删除的数据 |

触发器注意事项

1.性能影响:触发器会在每次相关事件发生时自动执行,这可能会对性能产生影响,特别是当触发器逻辑复杂或者表中数据量很大时。

2.调试困难:触发器的错误可能不易察觉,调试时需要特别注意。

3.递归触发:触发器中的操作可能会导致触发器的递归调用,需要避免这种情况,以免导致无限循环。

触发器六种执行时间和事件

  1. BEFORE INSERT

执行时间:在插入操作发生之前。

作用:允许你在数据插入之前修改数据,或对插入操作进行验证。

  1. AFTER INSERT

执行时间:在插入操作发生之后。

作用:可以在数据插入后执行额外的操作,如更新其他表、记录日志等。

  1. BEFORE UPDATE

执行时间:在更新操作发生之前。

作用:允许你在数据更新之前对数据进行校验或修改。

  1. AFTER UPDATE

执行时间:在更新操作发生之后。

作用:用于在数据更新之后执行一些后续操作,比如同步其他表的数据或执行计算。

  1. BEFORE DELETE

执行时间:在删除操作发生之前。

作用:允许你在数据删除之前进行某些检查或处理,例如备份删除的数据或记录日志。

  1. AFTER DELETE

执行时间:在删除操作发生之后。

作用:用于在数据删除之后执行一些操作,如清理相关数据或通知系统其他部分。

触发器的执行顺序

BEFORE INSERT 触发器在 AFTER INSERT 触发器之前执行。

BEFORE UPDATE 触发器在 AFTER UPDATE 触发器之前执行。

BEFORE DELETE 触发器在 AFTER DELETE 触发器之前执行。

语法结构

1.创建触发器

create trigger trigger_name

before/after insert/update/delete

on tbl_name

for each row \] -- 行级触发器 begin trigger_stmt ; end; 2.删除触发器 drop trigger \[schema_name.\]trigger_name 3.查看触发器 show triggers ; #### ******操作步骤****** 假设我们有一个员工表 employees 和一个日志表 employee_log。每当有新的员工被插入到 employees 表时,我们希望在 employee_log 表中记录这次插入的操作。 ##### ******1.创建表****** (1)创建 employees 表 CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, position VARCHAR(100), salary DECIMAL(10, 2) ); (2)创建 employee_log 表 CREATE TABLE employee_log ( log_id INT AUTO_INCREMENT PRIMARY KEY, action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, action_type VARCHAR(50), employee_id INT, employee_name VARCHAR(100), employee_position VARCHAR(100), employee_salary DECIMAL(10, 2) ); ##### ******2.创建插入触发器****** DELIMITER // CREATE TRIGGER after_employee_insert AFTER INSERT ON employees FOR EACH ROW BEGIN INSERT INTO employee_log (action_type, employee_id, employee_name, employee_position, employee_salary) VALUES ('INSERT', NEW.id, NEW.name, NEW.position, NEW.salary); END; // DELIMITER ; ### 存储过程 将一条或多条复杂的SQL语句,包含在存储过程中,存放在服务。 客户端使用call存储过程名;执行该存储过程; 优点:简化客户端的SQL编写,减少网络发送的数据量,加速执行,提高效率。 缺点:但在可移植性、调试、资源占用等方面存在不足。 存储过程适合用于处理数据库端的复杂、高频复用的业务逻辑,能提升性能和安全性;但在可移植性、调试、资源占用等方面存在不足。实际使用中需根据具体场景权衡,避免过度依赖或完全摒弃。 ### 函数 对数据进行简单处理,例如:求和、平均值、最大值、最小值、文本处理,获取时间等...,函数有返回值。 使用select 函数名(参数) ...; MySQL内置 MySQL自定义函数

相关推荐
m0_4665252913 分钟前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊1 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha1 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞1 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean1 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024631 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦1 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99991 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql