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

MySQL编程开发(了解)

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小时

-- 直接查询

select session wait_timeout;

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

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

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

# 赋值(方式1:直接赋值)

set @num1 = 10;

set @num2 := 20;    -- 支持 := 避免与 sql 关键字冲突

# 赋值(方式2:临时存储查询结果,把查询结果赋值给@user_name

select username into @user_name from users; 

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

select @num1 + @num2;      -- 输出30

select @user_count;           -- 查询users表行数

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

· 触发器

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

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

创建触发器

create trigger trigger_name

before/after insert/update/delete

on tbl_name

[ for each row ]  -- 行级触发器

begin

    trigger_stmt ;

end;

删除触发器

drop trigger [schema_name.]trigger_name

查看触发器

show triggers ;

· 存储过程

将复杂的SQL语句,包含在存储过程中,存放在服务端。

客户端使用call存储过程名;执行该存储过程;

优点:简化客户端的SQL编写,减少网络发送的数据量(减少网络带宽),加速执行,提高效率。

缺点:不适合分布式的环境使用。

总结:存储过程适合用于处理数据库端的复杂、高频复用的业务逻辑,能够提升性能和安全性;但在可移植性、调试、资源占用等方面存在不足。

注意事项

权限控制:创建存储过程/函数需 CREATE ROUTINE 权限,执行需 EXECUTE 权限。

作用域:存储过程/函数的局部变量需用 DECLARE 声明,且必须在 BEGIN...END 块的开头。

性能:频繁调用的简单逻辑建议用函数,复杂批量操作建议用存储过程。

安全性:避免在函数中执行数据修改操作(如 INSERT),可能导致不可预测的副作用。

# 创建存储过程(需先修改分隔符,避免分号冲突)

delimiter $$

create procedure countemployees(

    in dept_id int,           -- 输入参数:部门 id

    out emp_count int       -- 输出参数:员工数量

)

begin

    -- 查询部门员工数并赋值给输出参数

    select count(*) into emp_count

    from employees

    where department_id = dept_id;

end$$

delimiter ;

# 调用存储过程

call countemployees(101, @count);  

-- @count 是用户变量,用于接收输出结果

# 查看结果

select @count as employee_count;

· 函数

对数据进行简单处理,例如:求和、平均值、最大值、最小值、文本处理,获取时间等……,函数有返回值,存储过程没有返回值。

使用select 函数名(参数)……;

特性

存储过程

函数

返回值

无或多个输出参数

必须返回一个单一值

调用方式

CALL procedure_name( )

SELECT function_name( )

SQL上下文

可包含数据修改(如 INSERT)

通常禁止修改数据(仅查询)

适用场景

复杂业务逻辑(如批量数据处理)

简单计算或单一结果查询

# 创建函数(需开启安全模式,或指定 `deterministic` 等特性)

delimiter $$

create function calculateannualsalary(emp_id int)

returns decimal(10,2)  -- 指定返回值类型

deterministic         -- 声明函数是确定性的(相同输入返回相同输出)

begin

    declare monthly_salary decimal(10,2);

    declare bonus decimal(10,2);

    -- 查询月薪和奖金

    select salary, bonus into monthly_salary, bonus

    from employees

    where id = emp_id;

    -- 返回年薪(月薪×12 + 奖金)

return (monthly_salary * 12) + coalesce(bonus, 0);  

-- coalesce 处理 null

end$$

delimiter ;

# 调用函数

select id, name, calculateannualsalary(id) as annual_salary

from employees

where id = 1001;

· MySQL内置和自定义函数

-- ================ 内置函数 ================

# 数值函数

 abs(x)            -- 绝对值 abs(-10.9) = 10

 format(x, d)    -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46

 ceil(x)            -- 向上取整 ceil(10.1) = 11

 floor(x)        -- 向下取整 floor (10.1) = 10

 round(x)        -- 四舍五入去整

 mod(m, n)        -- m%n m mod n 求余 10%3=1

 pi()            -- 获得圆周率

 pow(m, n)        -- m^n

 sqrt(x)            -- 算术平方根

 rand()            -- 随机数

 truncate(x, d)    -- 截取d位小数

# 时间日期函数

 now(), current_timestamp();     -- 当前日期时间

 current_date();                    -- 当前日期

 current_time();                    -- 当前时间

 date('yyyy-mm-dd hh:ii:ss');    -- 获取日期部分

 time('yyyy-mm-dd hh:ii:ss');    -- 获取时间部分

 date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');    -- 格式化时间

 unix_timestamp();                -- 获得unix时间戳

 from_unixtime();                -- 从时间戳获得时间

# 字符串函数

 length(string)            -- string长度,字节

 char_length(string)        -- string的字符个数

 substring(str, position [,length])        -- 从str的position开始,取length个字符

 replace(str ,search_str ,replace_str)    -- 在str中用replace_str替换search_str

 instr(string ,substring)    -- 返回substring首次在string中出现的位置

 concat(string [,...])    -- 连接字串

 charset(str)            -- 返回字串字符集

 lcase(string)            -- 转换成小写

 left(string, length)    -- 从string2中的左边起取length个字符

 load_file(file_name)    -- 从文件读取内容

 locate(substring, string [,start_position])    -- 同instr,但可指定开始位置

 lpad(string, length, pad)    -- 重复用pad加在string开头,直到字串长度为length

 ltrim(string)            -- 去除前端空格

 repeat(string, count)    -- 重复count次

 rpad(string, length, pad)    --在str后用pad补充,直到长度为length

 rtrim(string)            -- 去除后端空格

 strcmp(string1 ,string2)    -- 逐字符比较两字串大小

# 聚合函数

 count()

 sum();

 max();

 min();

 avg();

 group_concat()

# 其他常用函数

 md5();

 default();

MySQL配置调优

http://www.xdnf.cn/news/1344619.html

相关文章:

  • 08高级语言逻辑结构到汇编语言之逻辑结构转换 continue break 完结汇编按逻辑结构
  • Redis---事务
  • 51单片机-驱动步进电机模块教程
  • C#_组合优于继承的实际应用
  • Kafka Broker 核心原理全解析:存储、高可用与数据同步
  • 如何从根源上理解并解决前端的CORS跨域问题
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • Unreal Engine ClassName Rule
  • Python 中 SQLAlchemy 和 MySQLdb 的关系
  • IKE 与 ISAKMP 核心笔记
  • 微信扫码登陆 —— 接收消息
  • 复合设计模式
  • 加密货币与区块链:六大刑事重灾区
  • 深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
  • 110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件
  • 深入理解 hash -r:解决 Linux 命令缓存难题的关键密钥
  • 自定义rabbitmq的ConnectionFactory配置
  • RabbitMQ深度剖析:从基础到高级进阶实战
  • 乐迪信息:AI摄像机+刮板机人员入侵检测:杜绝井下安全事故
  • 爬虫基础学习-配置代理、以及项目实践
  • 关于爬虫的基本步骤说明【爬虫七步骤】
  • jenkins实现分布式构建并自动发布到远程服务器上 jenkins实现自动打包编译发布远程服务器
  • Laravel分布式全链路追踪实战
  • 【机器学习深度学习】LMDeploy的分布式推理实现
  • selenium爬虫
  • 布隆过滤器:用微小的空间代价换取高效的“可能存在”判定
  • TCP/UDP详解(一)
  • 微服务的编程测评系统14-C端题目列表功能-个人中心
  • Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
  • 高通Camx相机dump yuv和raw图的抓取方式和查看