k01_mysql视图游标存储过程触发器

视图---事务---游标---存储过程---触发器

1、视图

创建视图

-- 创建一个名为:view_student_info 的视图,将student的所有信息放在视图中
CREATE VIEW view_student_info AS SELECT *FROM student
-- 指定创建视图名中的字段名称(默认创建的视图字段与原表完全相同,但是也可以不同)
CREATE VIEW v_student_info(a,b,c,d,e) AS SELECT sno,sname,ssex,sage,sdept FROM  student 

查询视图:

#跟插叙数据表一样
#查询视图名为:v_student_info的视图
SELECT *FROM v_student_info 
#查询视图:v_student_info的定义
DESCRIBE v_student_info

image-20230510213522201

image-20230510214042926

2、事务

数据库中的事务是指对数据库执行一批操作,
在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,
不会存在部分成功的情况。

事务的几个特性:
原子性
一致性
隔离性
持久性

mysql中事务默认是隐式事务,执行insertupdatedelete操作的时候,数据库自动开启事务、提交或回滚事务。
是否开启隐式事务是由变量autocommit控制的。
所以事务分为隐式事务和显式事务。
-- 查看autocommit是否开启了自动提交         autocommit为ON表示开启了自动提交。
SHOW VARIABLES like 'autocommit';

-- 以下是显示提交
-- COMMIT
-- 创建一个表格,里面仅仅有一个名a的字段
CREATE TABLE test1(a int);
SELECT *FROM test1;
-- 设置不自藕丁提交事务
set autocommit=0;
-- 查看autocommit是否开启了自动提交,目前value为OFF
SHOW VARIABLES like 'autocommit';
-- 向test1表中插入一条数据,比如插入:55
INSERT INTO test1 VALUES(55)
-- 查询test1表看看当前插入的数据是否存在
SELECT *FROM test1;
COMMIT;
SET autocommit=1;
SHOW  VARIABLES LIKE "autocommit";
-- 事务回滚
-- 设置autocommit中的value状态值为:OFF(0)
SET autocommit=0;
-- 查看变量autocommit是否开启了自动提交
SHOW  VARIABLES LIKE "autocommit";
-- 向test1表中插入一个数据
INSERT INTO test1 VALUES(100)
-- 查询test1表中的数据
SELECT * FROM test1;
-- 回滚事务操作
ROLLBACK;
-- 查询test1表中的数据
SELECT * FROM test1;-- 事务回滚了
SET autocommit=1;
SELECT * FROM test1;

3、存储过程

类似yu函数或者方法,但是写法可能不同

1.创建一个存储过程

创建一个mypro的存储过程,其中传入变量a,b为int类型,输出类型为sum也为int类型
CREATE PROCEDURE mypro
(IN a INT,IN b INT,OUT sum INT)
BEGIN
SET sum=a+b;
END;
  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);
  • INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。

2.使用mypro存储过程

CALL mypro(15,23,@s);-- 调用存储过程
SELECT @s;  -- 显示刚刚调用的存储过程中输出逇@s的值

image-20230511165329027

-- 使用declare声明变量,这个是在存储过程中使用的变量,只可以在存储过程汇中使用
-- 创建一个ms的一个存储过程,在其中声明变量
CREATE PROCEDURE ms()
BEGIN
-- 声明一个变量,变量名为a
DECLARE a VARCHAR(10);
SET a="我是a变量";
-- SELECT *FROM student WHERE sno!=a;
SELECT a;

END

CALL ms();

4、游标

MySQL 中使用 **DECLARE** 关键字来声明游标,并定义相应的 SELECT 语句,根据需要添加 WHERE 和其它子句。其语法的基本形式如下:

DECLARE cursor_name CURSOR FOR select_statement;

其中,cursor_name 表示游标的名称;select_statement 表示 SELECT 语句,可以返回一行或多行数据。

1.声明游标

-- 游标--只能在存储过程中使用
-- 创建一个名为:testyoubiao的存储过程声明一个名为nameYouBiao的游标,
CREATE PROCEDURE testyoubiao()
BEGIN
DECLARE nameYouBiao CURSOR FOR
SELECT sname FROM student;
END;

2.使用游标

CREATE DEFINER=`root`@`localhost` PROCEDURE `testyoubiao3`()
BEGIN
-- 声明变量
DECLARE a VARCHAR(10);
DECLARE b VARCHAR(10);
DECLARE c VARCHAR(10);
DECLARE d VARCHAR(10);
DECLARE e VARCHAR(10);
-- 声明游标
DECLARE nameYouBiao CURSOR FOR
SELECT * FROM student WHERE sno=200215121;
OPEN nameYouBiao;#打开游标
-- 使用游标
FETCH nameYouBiao INTO a,b,c,d,e;#注意:游标字的段数要跟要分赋值的变量数,数量相同
SELECT a;
SELECT b;
SELECT c;
SELECT d;
END

5、触发器

在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下: 
CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT     
ON TABLE_NAME FOR EACH ROW trigger_STMT 
  • 参数trigger_name表示要创建的触发器名;
  • 参数BEFORE和AFTER指定了触发器执行的时间,前者在触发器事件之前执行触发器语句,后者在触发器事件之后执行触发器语句;
  • 参数trigger_EVENT表示触发事件,即触发器执行条件(触发事件),包含DELETE、INSERT和UPDATE语句;
  • 参数TABLE_NAME表示触发事件的操作表名;
  • 参数FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器;
  • 参数trigger_STMT(sql语句)表示激活触发器后被执行的语句。执行语句中如果要引用更新记录中的字段,对于INSERT语句,只有NEW是合法的,表示当前已插入的记录;对于DELETE语句,只有OLD才合法,表示当前删除的记录;而UPDATE语句可以和NEW(更新后)以及OLD(更新前)同时使用。

注意:

不能创建具有相同名字的触发器。
对于具有相同触发程序动作时间和事件的给定表,不能有两个触发器(比如after insert插入之后有一个触发器那么就不能再有触发器是after的了,但是before insert是可以的)。
因此,在创建触发器之前,需要查看MySQL中是否已经存在该标识符的触发器和触发器的相关事件。

表结构如下:

student:

image-20230510212515995

course:

image-20230510212456860

sc:

image-20230510212533697

posted @   六个小豹  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示