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

mysql里的批处理(sql语句)

格式:

l mysql –u user –p < sql_file

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

l 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文件里。

触发器

l 触发器是属于某一个表的

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

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

语法:

l 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:触发事件,取值范围:insert、update、delete

on:关键字

table_name:表名

for each row:关键字

begin:开始(关键字)

sql:sql语句(可以有多条语句)

end:结束(关键字)

管理触发器

l show triggers;

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

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

l drop triggers trigger_name ;

删除触发器

例题1:

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

创建触发器

使用触发器

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

关键字new和old的区别:

例2:

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

Delete from department where name=’市场部’;

市场部

Old.id=1

例3:

记录学生的改名记录

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

事务管理

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

开启事务处理的方式:

l 标准事务:start transaction

l 非标准:set autocommit=0

区别?????????

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

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

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

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

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

l start transaction:开启标准事务

l commit:提交事务

l 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 还原点(还原到指定的还原点)

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

存储过程

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

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

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

1、创建语法:

create procedure sp_name

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

 begin

 .........

 end

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

sp_name:存储过程名称

[type]:in、out、inout

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:

l 执行一条插入数据的语句

调用以上这个存储过程:

call proc1();

4、关于参数

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

Out:输出参数

Inout:输入输出参数

例2:

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

call proc(‘楚留香’,30);

例3:

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

Select name from student order by age desc limit 1;

例4:

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

学生编号:输入参数

姓名:输出参数

年龄:输出参数

时间: 2024-11-07 04:02:11

mysql批处理/触发器/事务管理/存储过程的相关文章

MySQL视图、事务与存储过程

一.可视化工具的使用方法 简述:首先我们使用数据库可视化工具是为了让我们在建立数据库的时候能够减少代码的书写从而提升我们编写程序的效率,而我使用的是Navicat工具是因为使用它基本为无脑操作我就不过多的介绍. 二.注入mysql攻击 1.什么是注入mysql攻击? 简述:注入mysql攻击指的是用户可以某种方式无需用户名或密码就可以登入你的数据库. 2.注入mysql攻击的两种方式: 1:用户在登录时在其输入的用户名后写入了如__等字符,在pymysql中__代表的是注释所以跟在其后的输入密码

MySQL数据库的事务管理

当前在开发ERP系统,使用到的数据库为Mysql.下面介绍下如何开启事务,以及事务隔离的机制 : 1. 检查当前数据库使用的存储引擎. show engines; 2. 修改前my.ini中的文件如下: 3. 修改my.ini的文件如下. 3.1 修改了默认的存储引擎 3.2 增加了mysql数据库的事务隔离级别, 如果不添加默认是REPEATABLE-READ. 4. 只需要重启mysql的服务即可. net stop mysql net start mysql 5. 再次查询show eng

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

1.视图 视图是一个虚拟表(非真实存在).使用视图我们可以把查询过程中的临时表摘出来,用视图去实现. 视图有明显的效率问题,而且使用视图会过分依赖视图,强耦合,这样意味着扩展sql极为不便,因此不推荐使用 创建视图,使用视图 DROP VIEW teacher_view 删除视图 DROP VIEW teacher_view 2.使用触发器可以定制用户对某张表进行增删改操作前后的行为,注意:没有查询 delimiter // create trigger t1 BEFORE INSERT on

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

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

MySQL存储过程之事务管理

ACID:Atomic.Consistent.Isolated.Durable 存储程序提供了一个绝佳的机制来定义.封装和管理事务. 1,MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: Java代码 1         MyISAM:不支持事务,用于只读程序提高性能 2         InnoDB:支持ACID事务.行级锁.并发 3         Berkeley DB:支持事务 隔离级别: 隔离级别决定了一个session中的事务可能对另一个

mysql七:视图、触发器、事务、存储过程、函数

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,

mysql的 视图、触发器、事务、存储过程、函数、索引与慢查询优化

视图 假设有两张表学生和老师,学生表(sid,name,tid)关联老师表(tid,tname) 创建视图的语法: create view 视图名 as SQL语句 实例: create view student2teacher as select * from student inner join teacher on student.tid=teacher.tid; 创建视图后会产生一个名为 student2teacher 的表,可以直接调用. 思考:开发过程中会不会去使用视图? 不会!视图

MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】

1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是由基本表(实表)产生的表(虚表). 3. 视图的建立和删除不影响基本表. 4. 对视图内容的更新(添加.删除和修改)直接影响基本表. 5. 当视图来自多个基本表时,不允许添加,修改和删除数据. 1.创建视图 cre

Java数据库连接——JDBC调用存储过程,事务管理和高级应用

阅读目录 一.JDBC常用的API深入详解及存储过程的调用1.存储过程(Stored Procedure)的介绍2.JDBC调用无参存储过程3.JDBC调用含输入参数存储过程4.JDBC调用含输出参数存储过程二.JDBC的事务管理1.JDBC实现事务管理2.通过代码实现事物的管理三.数据库连接池(dbcp.c3p0)1.dbcp使用步骤2.c3p0使用步骤3.连接池总结四.JDBC的替代产品(Hibernate.Mybatis)1.Commons-dbutils 2.Hibernate简介3.M