zoukankan      html  css  js  c++  java
  • 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脚本,然后

    mysql里的批处理(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

     

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

     

    创建触发器

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    使用触发器

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

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

     

     

     

     

    关键字newold的区别:

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    2

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

    Delete from department where name=市场部;

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    市场部  

    Old.id=1

    3

     

    记录学生的改名记录

     

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

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    事务管理

     

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

     

     

    开启事务处理的方式:

    标准事务: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

    执行一条插入数据的语句

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    调用以上这个存储过程:

     

    call proc1();

     

     

    4、关于参数

     

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

    Out:输出参数

    Inout:输入输出参数

     

    2

     

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

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    call proc(楚留香,30);

     

    3

     

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

     

    Select name from student order by age desc limit 1;

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

     

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

    4

     

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

     

    学生编号:输入参数

    姓名:输出参数

    年龄:输出参数

    mysql里的批处理(sql语句)、触发器、事务管理、存储过程 - 风信子 - 风信子

     

     

     

     

     

  • 相关阅读:
    点击listview 的列头对其item进行自动排序
    将选择的图片显示在listview中,并显示filename,path和type
    【翻译】8 个可以节省时间的 C# 开发相关工具
    【原创】关于乘法运算的新思路
    【翻译】为什么我们要用抽象类?
    【翻译】如何使用 C# 的 BackgroundWorker
    【汉化】DevExpress插件中RichEdit控件的自定义汉化方法
    关于C#日期格式化问题
    C#获取(大陆)身份证基本信息的算法
    C#关于精确年龄的算法(精确到天)
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/7414926.html
Copyright © 2011-2022 走看看