视图---事务---游标---存储过程---触发器
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
2、事务
数据库中的事务是指对数据库执行一批操作,
在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,
不会存在部分成功的情况。
事务的几个特性:
原子性
一致性
隔离性
持久性
mysql中事务默认是隐式事务,执行insert、update、delete操作的时候,数据库自动开启事务、提交或回滚事务。
是否开启隐式事务是由变量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的值
-- 使用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:
course:
sc:
标签:autocommit,k01,触发器,test1,--,student,mysql,SELECT From: https://www.cnblogs.com/2580p/p/18066880