mysql-高级功能(触发器、存储过程、视图、事务)
触发器-created trigger
触发器就是当达到某种条件自动触发
当你在对数据进行增删改的情况下会自动触发触发器,执行代码
1.触发器分为六种情况
之前:before 之后:after
增加前、增加后 before insert 、 after insert
删除前、删除后 before delete 、after delete
修改前、修改后 before update 、after updata
2.语法结构
delimiter $$
created trigger trigger_name
{before | after} {insert | update | delete}
ON table_name
[FOR EACH ROW]
when (condition)
begin
-- 触发器执行的操作
end $$
delimiter ;
解释:
delimiter $$ //将mysql默认的结束符由;换成$$,因为中间需要用到分号;
delimiter ; //结束之后记得再改回来,不然后面结束符就都是$$了
trigger_name:是触发器的名称
table_name:是要操作的表的名称
BEFORE或after,insert、update、delete:事件
for each row :行级触发器(sql影响一行j就触发一次)
for each statement : 语句级触发器(默认,一条sql触发一次)
old:行级,表示触发器执行之前字段,old.age
new:行级,表示触发器执行之后字段,new.age
old_table:语句级,更新前,old_table.age
new_table:语句级,更新后,new_table.age
3.创建触发器
insert-新增触发
假设我们有一个名为orders的表,其中包含订单信息,我们想要在每次向该表插入数据时自动向另一个名为order_log的表中插入一条日志记录。
首先,我们需要创建order_log表:
created table order_log (
id INT primary key,
order_id INT,
action VARCHAR(50),
createdd_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
创建触发器:每当向orders表插入一条数据时,就会自动向order_log表中插入一条日志记录
--当某个表数据新增时触发
created trigger insert_order_log
after insert on orders
for each row
begin
insert INTO order_log (order_id, action)
VALUES (NEW.id, 'Order createdd');
end;
update-更新触发
--当某个字段被更新前触发
created trigger orders
after update of 字段 ON orders
FOR EACH ROW
begin
insert INTO order_log (order_id, action)
VALUES (NEW.id, 'Order createdd');
end;
--创建一个触发器:库存数量>0表示正常,库存数量<=0表示库存不足通知补货
created trigger orders
after update of 库存余额字段 ON orders
FOR EACH ROW
when new.库存余额字段<0 and old.库存余额字段 >=0
begin
insert into 补货表;
end;
4.查询/删除触发器
drop trigger trigger_name; //删除
SHOW triggerS; //查询
//在 MySQL 中,所有触发器的信息都存在 information_schema 数据库的 triggers 表中
SELECT * FROM information_schema.triggers where trigger_name= '触发器名';
由运行结果可以看到触发器的详细信息。对以上显示信息的说明如下:
trigger_SCHEMA 表示触发器所在的数据库;
trigger_NAME 表示触发器的名称;
EVENT_OBJECT_TABLE 表示在哪个数据表上触发;
ACTION_STATEMENT 表示触发器触发的时候执行的具体操作;
ACTION_ORIENTATION 的值为 ROW,表示在每条记录上都触发;
ACTION_TIMING 表示触发的时刻是 after;
存储过程-created procedure
内部封装了操作数据库的sql语句,后续想要实现相应的操作 只需要调用存储过程即可
1.创建存储过程
#创建两数之和存储过程
delimiter $$
created procedure test2 (IN num1 INT, IN num2 INT, OUT sum INT)
begin
SET sum = num1 + num2;
end $$
delimiter ;
解释:
delimiter $$ :修改mysql的结束';'这个符号,因为下面会用到分号
delimiter ; :在把mysql结束符号改回来。
in :表示这个参数必须只能是传入不能被返回出去
out:表示这个参数可以被返回出去
inout:表示即可以传入也可以被返回出去
2.使用存储过程
set @num1 = 5;
set @num2 = 10;
call sum_two_numbers(@num1, @num2, @sum);
selecte @sum;
3.查看存储过程
show procedure status; //查看所有
show procedure status where db='jeff'; //查看某个库的的存储过程
show created procedure sum_two_numbers; //查看指定名字的存储过程
4.修改存储过程
ALTER PROCEDURE procedure_name [characteristics...]
begin
-- 存储过程主体
end;
5.删除存储过程
drop procedure if exists procedure_name; //删除存储过程
视图-created view
1.视图命名/说明
新建的视图名:view_表1_表2 (一般根据命名规范)
注:
1.视图只有表结构,视图中的数据还是来源于原来的表
2.不要改动视图表中的数据
3.一般情况下不会频繁的使用视图来写业务逻辑
1.什么是视图?
一个查询语句的结果是一张虚拟表,将这种虚拟表保存下来,它就变成了一个视图
2.为什么要使用视图?
当平凡需要使用到多张表的连表结果,你就可以事先生成好视图之后直接调用即可,避免反复写连表操作的sql语句。
2.视图创建/使用
created view 新建的视图名 as 连表
eg:
created view view_user_bike as select * from user inner join bike on bike_id = user.bike_id
使用:
select * from view_user_bike
事务-start transaction
事务包含一大堆sql语句,这些sql语句要么同时成功,要么一个也别想成功
事务的作用:保证了数据操作的安全系
案例:用交行的银行卡操作建行的ATM机给工行的账户转账1000万
当交行的银行卡钱扣除1000万,建行的ATM机告诉工行给转账账号加1000万。在过程中,如果建行的ATM机突然故障,失去了消息,那么钱扣除了却没有到账。
1.事务四大特性
A.原子性 C.一致性 I:隔离性 D:持久性
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 (总量不变)
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
2.开启事务-语法结构
1.# 修改数据之前先开启事务操作
start transaction;
2.# 修改操作
sql语句
3.# 回滚到上一个状态,未保存。数据在内存中
rollback;
4.# 开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘
commit; # 相当于保存,数据刷到硬盘
注:
rollback 在没有永久性更改之前,都可以回滚。就跟没有保存之前的撤回一样。
commit 就更保存数据一样
mysql-高级功能(触发器、存储过程、视图、事务)的更多相关文章
- mysql 视图 触发器 存储过程 函数事务 索引
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...
- python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数
python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...
- Mysql 视图,触发器,存储过程,函数,事务
视图 视图虚拟表,是一个我们真实查询结果表,我们希望将某次查询出来的结果作为单独的一个表,就叫视图,无法对图字段内容进行增删改. --格式: CREATE VIEW 视图名字 AS 操作; --比如: ...
- mysql高级:触发器、事务、存储过程、调用存储过程
一.触发器 二.pymysql事务测试 三.存储过程 四.pymysql调用存储过程 一.触发器 在某个时间发生了某个事件时 会自动触发一段sql语句 create trigger cmd_ins ...
- Oracle_高级功能(7) 数据字典视图和动态性能视图
oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- MySQL:视图、触发器、存储过程、事务
视图: 视图,虚拟表 创建虚拟表: # 语法: # create view 虚拟表名称 as 虚拟表; create view course_and_teacher as select * from ...
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- MySQL 第十天(视图、存储过程、函数、触发器)
MySql高级-视图.函数.存储过程.触发器 目录 一.视图 1 1.视图的定义 1 2.视图的作用 1 (1)可以简化查询. 1 (2)可以进行权限控制, 3 3.查询 ...
随机推荐
- 抽风的Maven、maven插件及配置
Idea 配合 Maven使用中有时遇到莫名奇妙的问题,又莫名奇妙的恢复正常.整理如下: 1.删除系统环境变量Maven_Home,只需在IDEA中指定Maven及settings.xml即可. 有时 ...
- 换个脑袋,做个小练习------四则运算系统的随机出题的jsp实现
四则运算出题系统网页界面的实现(别期待,只有俩操作数) index.jsp <%@ page contentType="text/html;charset=UTF-8" la ...
- 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享
前言 本文基于资深创业者@坚叔在「RTE 2022 创新编程挑战赛」宣讲活动中分享内容二次整理. 嘉宾简介:陈坚(坚叔),国内二次元 AR/VR 资深创业者,国内第一批空间虚拟数字化从业人员,获得政府 ...
- 声网教育aPaaS 产品灵动课堂:「低代码」开发,15分钟极速上线
1 月 20 日,声网Agora 在官网正式发布教育行业首款 aPaaS 产品灵动课堂,帮助教育机构和开发者最快 15 分钟上线自有品牌.全功能的在线互动教学平台,节省 90% 开发时间.目前,声网面 ...
- 快速带你复习html(超详细)
此内容包含: html基础 列表.表格 媒体元素 表单(重点) 1.HTML 基础 目标: 会使用HTML5的基本结构创建网页 会使用文本相关标签排版文本信息 会使用图像相关标签实现图文并茂的页面 会 ...
- 微软wsl2启用天父行程systemd
默认情况下 微软wsl2的天父行程是init,没办法使用systemctl相关指令,所以想使用天父行程 systemd. 本文以Wsl2 Alma Linux为例,启用systemd 上帝与你同在,阿 ...
- 从源码彻底理解 Prometheus/VictoriaMetrics 中的 relabel_configs/metric_relabel_configs 配置
背景 最近接手维护了公司的指标监控系统,之后踩到坑就没站起来过.. 本次问题的起因是我们配置了一些指标的删除策略没有生效: - action: drop_metrics regex: "^e ...
- 深度学习之PyTorch实战(4)——迁移学习
(这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torch ...
- SQL Server底层架构技术对比
背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为"IT的心脏".因此,让数据库安全.稳定.高效地运行已经成为IT管理者必须要面对的问题.数据库在底层架构 ...
- win10_Dock安装设置
1.安装:(在win10上安装) 桌面版:https://www.docker.com/products/docker-desktop, 安装后重启电脑 2.配置 打开DockerDesktop,(可 ...