IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySql中函数、过程、游标、触发器 的创建和调用。 -> 正文阅读

[大数据]MySql中函数、过程、游标、触发器 的创建和调用。

MySql中函数过程的创建语句和Oracle中创建函数过程的语句有些差别。

如果在创建存储过程、函数的过程中报如下错误 可以先设置系统变量。SET GLOBAL?? log_bin_trust_function_creators = 1;

Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)?? ?0.000 sec

1、函数的创建(必须有returns,参数可以有0-N个)

????????delimiter // -- 指定结束符,注意delimiter 和结束符之间一定要有空格
?? ?????????create function test_function2(empid int)
?? ??????????? ?returns double
? ? ? ????????? begin
?? ??? ??????????? ?declare salay double default 0; -- 定义一个变量
?? ??? ??? ?????????select t.salary ?into salay from employees t where t.employee_id=empid; -- 将id为103的员工工资赋值给变量
? ? ? ? ? ????????? return salay; -- 返回
? ? ? ????????? end//
????????delimiter ; -- 将结束符改回

? ? ? ???set @empid = 103; --定义一个变量员工id
? ? ? ? ?select test_function(@empid);--函数的调用

2、存储过程的创建(没有returns 参数可以有0-N个并且需要用in或者out标示是出参还是入参)

delimiter //?
?? ?create procedure test_procedure(in empid int,out salary double)
? ? begin
?? ??? ?select t.salary into salary from employees t where t.employee_id = empid;
? ? end//
delimiter ;?
set @empid = 103; -- 定义一个变量-入参
set @salary = 0; -- 定义一个变量-出参
call test_procedure(@empid,@salary); -- 调用存储过程
select @salary; -- 查询出参

3、游标(游标需要放在过程,或者函数中使用仅限当前会话。函数过程的创建都是先写关键字在写名称,游标相反,是先写名称再写关键字)? ?

delimiter //?
?? ?create procedure test_procedure1(out allSalary double)
? ? begin
?? ??? ?declare endFlag int default (select count(1) from employees);
? ? ? ? declare sal double default 0;
? ? ? ? declare amountSal double default 0;
?? ??? ?declare test_cursor cursor ?for ?select salary from employees; -- 定义一个游标 注意变量一定要定义在游标前面
? ? ? ? open test_cursor; -- 打开游标 (打开之后才可以使用)
? ? ? ? repeat ?-- 循环游标
? ? ? ? fetch ?test_cursor into sal;
? ? ? ? set amountSal = amountSal + sal;
? ? ? ? set endFlag := endFlag - 1;
? ? ? ? until endFlag <= 0 end repeat; -- 退出游标
? ? ? ? close test_cursor; -- 关闭游标
? ? ? ? set allSalary = amountSal;
? ? end//
delimiter ;

set @allSalary = 0;
call test_procedure1(@allSalary); -- 调用存储过程 内部用游标将所有员工的工资加起来(这种情况用函数会更好)。
select @allSalary; -- 查询工资总和

4、触发器(触发器是依附于表,必须建立在某个表上)

创建了test_trigger触发器 在删除 employees的数据时会将被删除员工的id,nam,email 都保存在employees_balck表

如果删除时报1175 错误则需要 设置变量??SET SQL_SAFE_UPDATES = 0;

delimiter //
create trigger test_trigger
?? ?before delete on employees
? ? for each row
? ? begin
?? ??? ?insert into employees_black(employee_id,last_name,email) values (old.employee_id,old.last_name,old.email);
? ? end//
delimiter ;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:41:07  更:2022-10-17 12:42:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 17:33:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码