mysql批处理/触发器/事务管理/存储过程

Posted 跳动de手指

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql批处理/触发器/事务管理/存储过程相关的知识,希望对你有一定的参考价值。

mysql里的批处理(sql语句)
 

格式:

 

mysql u user p < sql_file

表示从某个文件里执行sql语句

mysql u user p < sql_file > out_file

表示从某个文件里执行,并将执行结果保存到out_file文件之中

 

举个例子:

小王每天早晨来之后,都需要查询班级共有多少人,还要查本学期共有几门课程,还要查询最近的考试成绩。。。。。。。。需要做很多操作

 

sql.txt里 

use pingtai;   //选择数据库

select * from users  limit 5; //sql语句

delete from users where id = 6;  //只有查询输出结果、插入、修改、删除不会输出结果

 

 

需要将以上操作存放至一个sql脚本,然后

技术分享

技术分享

这个例题可以将输出的查询结果保存到student.xls文件里。

 

 

 

 

 

 

 

 

 

 

 

触发器

触发器是属于某一个表的

 

当在这个表上执行插入、更新或删除操作的时候就导致触发器的激活 

 

我们不能给同一张表的同一个事件安排两个触发器 

语法:

create trigger trigger_name  before | after insert | update | delete on table_name

for each row

begin

   sql

   end

create trigger:关键字

 

trigger_name:触发器名称(自定义)

 

trigger_time:触发时间,取值范围:before(之前)和after(之后)

 

trigger_event:触发事件,取值范围:insertupdatedelete

 

on:关键字

 

table_name:表名

 

for each row:关键字

 

begin:开始(关键字)

 

sqlsql语句(可以有多条语句)

 

end:结束(关键字)

 

 

 

 

管理触发器 

 

show triggers;

 

查询当前数据库下所有表的触发器

information_schema数据库下,有一个表叫triggers,里面保存了所有数据的触发器信息

drop triggers trigger_name ;

删除触发器

例题1

 

在新同学入学时,将他的姓名和年龄存至另外一个表内

 

创建触发器

技术分享

使用触发器

技术分享

student表插入数据的之后,会向stu表插入新数据的姓名和年龄

 

 

 

 

关键字newold的区别:

技术分享

2

删除一个部门之前,先删除掉这个部门下的所有员工

Delete from department where name=市场部;

技术分享

市场部  

Old.id=1

3

 

记录学生的改名记录

 

当一个学生改名时,把原名和新名插入到一个表中,并保存改名的时间

技术分享

事务管理

 

为保证数据库内容的一致,就要将数据库的一组操作作为一个整体来进行,要么全部成功完成,要么全部失败退出。

 

 

开启事务处理的方式:

标准事务:start transaction

非标准:set autocommit=0

 

区别?????????

 

标准的:遇到commitrollback语句,则认为是事务终止,后面的语句会立即写入到文件

非标准的:即使遇到commitrollback语句,后面语句仍然处于事务之中,说明不会写入到文件

 

 

set autocommit = { 0 | 1 } 设置是否为自动提交

set autocommit=0:表示关闭自动提交模式

set autocommit=1:表示开启自动提交模式

start transaction:开启标准事务

commit:提交事务

rollback:回滚事务

Set autocommit=0; //关闭自动提交模式

Delete from student;

Delete from subject;

//到此为止,数据没有真正写入到文件

//Commit;

//如果执行commit,数据真正写入

//Rollback

//事务回滚

问题?

10条数据

先删除 3

Commit;

先删除3

Rollback;

Savepoint 还原点1;

操作………………..

Savepoint 还原点2;

操作………………

Savepoint 还原点3;

操作………………

Rollback to 还原点(还原到指定的还原点)

还原到指定的还原点之后,这个还原点之后的还原点会自动消失

存储过程

大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 

 

存储过程像是我们SQL里的函数

我们只需要定义存储过程,在调用时,通过指定参数,就可以帮助我们完成一些功能!

1、创建语法:

create procedure sp_name 

[参数名] [类型],[参数名] [类型

 begin 

 ......... 

 end 

create procedure:关键字(创建存储过程)

sp_name:存储过程名称

[type]inoutinout

in:输入参数(在调用存储过程时,必须指定)

out:输出参数(必须指定,可以在存储过程中被修改)

[参数名]

[参数类型]:数据类型

Begin:关键字

Sql

Sql

End:关键字

2、查看与删除

select name from mysql.proc where db=’数据库名’;

我们创建的所有存储的信息,会保存到mysql数据库下proc表中

show procedure status where db=‘数据库名‘;

show create procedure 数据库.存储

3、调用语法:

 

call sp_name [参数名

 

 

 

 

1

执行一条插入数据的语句

技术分享

调用以上这个存储过程:

 

call proc1();

 

 

4、关于参数

 

In:输入参数(如果不指定,默认为in

Out:输出参数

Inout:输入输出参数

 

2

 

创建一个存储过程,要求有两个输入参数分别为姓名和年龄,用户调用存储过程时需要指定两个参数,然后将传递的值插入至表中。

技术分享

call proc(楚留香,30);

 

3

 

查询年龄最大的同学的姓名

 

Select name from student order by age desc limit 1;

技术分享

 

技术分享

4

 

创建一个存储过程,要求可根据学生编号查询出学生的姓名和年龄

 

学生编号:输入参数

姓名:输出参数

年龄:输出参数

技术分享

 

 

 

 

 

以上是关于mysql批处理/触发器/事务管理/存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之视图触发器事务存储过程函数 流程控制

MySQL之视图触发器事务存储过程函数

mysql-高级功能(触发器存储过程视图事务)

MySQL 存储过程/游标/触发器/事务

mysql数据库之 存储引擎事务视图触发器存储过程函数流程控制

第十部分 游标+触发器+事务处理