博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql高级:触发器、事务、存储过程、调用存储过程
阅读量:5077 次
发布时间:2019-06-12

本文共 2883 字,大约阅读时间需要 9 分钟。

 

一、触发器

二、pymysql事务测试

三、存储过程

四、pymysql调用存储过程

 

 

一、触发器

   在某个时间发生了某个事件时  会自动触发一段sql语句

  

  create trigger cmd_insert_triger before insert on cmd for each row
       begin
       if new.success = "no" then
       insert into errlog values(null,new.cmd,new.sub_time);
       end if;
       end
  asdsadsadsadsadsadsd     ;
  delimiter //
  ;
 

二、pymysql事务测试

 事务*****

    是逻辑上的一组sql语句   他们要么都成功 要么都失败  今后只要执行sql就会有事务
    start transaction
    rollback  出现错误则执行回滚
    commit  没有错误则提交

 四个特性    原子性 一致性 隔离性 持久性

    四个隔离级别  读未提交  读已提交  可重复读  序列化执行(串行)

import pymysqlconn = pymysql.connect(    user="root",    password="root",    database="day48",    charset="utf8")cursor = conn.cursor(pymysql.cursors.DictCursor)# cursor.execute("delete from account where id =1")# conn.commit()sql = "update account set money = money - 100    where id = 2"sq2 = "update account set moneys = money + 100    where id = 3"try:    cursor.execute(sql)    cursor.execute(sq2)    conn.commit()    print("提交了!")except:    print("回滚了!")    conn.rollback()# 把你需要放在同一事务的sql执行 放在try中  最后加上commit# 如果捕获到异常则执行rollback# 在mysql客户端中 如果遇到了sql语句异常 能回滚吗?"""脏读?    读取到另一个事务未提交的数据不可重复读     一个事务在查询 一个在update   第一次查 和第二次查有可能数据不一样幻读      一个事务在查 另一个insert 或 delete 第一次查 和第二次查有可能记录不一样"""# 什么是事务# #     逻辑上的一组操作,# # 事务的特点# #     原子性# #     一致性# #     隔离性# #     持久性# # 什么时候使用事务# #     当需要保证一堆sql 要么都成功 要么都失败时

 

三、存储过程

1.数据库操作全都放到mysql中,应用程序不需要编写sql语句 直接调存储过程优点:    应用程序开发者,工作量降低,    提高程序的执行效率 因为网络io减少了缺点:学习成本高,扩展性 维护性差     部门间沟通成本2.应用程序完全自己编写sql语句优点:    扩展性 维护性高    部门间沟通成本缺点:工作量大,sql语句的优化需要应用程序开发者完成今后常用的3.使用ORM(对象关系映射 )框架  可以直接使用面向对象的方式完成对数据库的CRUD    简单的说就是帮你封装了sql语句的生成优点:不需要写sql语句,开发效率高不需要考虑sql优化问题缺点:执行效率比第二种方式略低 完全可以忽略 delimiter // create procedure p1(in start int,in stop int,out res int)    begin    select *from student where id >= start and id <= stop;    select *from student;    set res = 1;    end// delimiter ;delimiter //create PROCEDURE p5(OUT p_return_code tinyint)BEGIN    DECLARE exit handler for sqlexception    BEGIN        set p_return_code = 1;        rollback;    END;    # exit 也可以换成continue 表示发送异常时继续执行    DECLARE exit handler for sqlwarning    BEGIN        set p_return_code = 2;        rollback;    END;    START TRANSACTION;    update account set money = money - 1000 where id = 1;    update account set money = money - 1000 where id = 1; # moneys字段导致异常    set p_return_code = 0; #0代表执行成功    COMMIT;END //delimiter ;

 

 

四、pymysql调用存储过程

import pymysqlconn = pymysql.connect(    user="root",    password="root",    database="day48",    charset="utf8")cursor = conn.cursor(pymysql.cursors.DictCursor)cursor.callproc("p1",(2,5,1)) #pymysql 会给参数全都创建对应的变量# 命名方式 @_p1_0  @_p1_1 @_p1_2print(cursor.fetchall()) # 如果过程中包含多个查询语句  得到的是第一条查询语句的结果cursor.execute("select @_p1_2")print(cursor.fetchone())i = 0

 

五、6备份与恢复***

    mysqldump -u -p (库名 [表名] | --all--databases --databases 库名1 库名2) > 文件路径
    恢复
    1.mysql -u -p < 文件路径
    2.source 文件路径

转载于:https://www.cnblogs.com/wuzhengzheng/p/10273490.html

你可能感兴趣的文章
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>
MVC+Servlet+mysql+jsp读取数据库信息
查看>>
黑马程序员——2 注释
查看>>
用OGRE1.74搭建游戏框架(三)--加入人物控制和场景
查看>>
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
hiho1079 线段树区间改动离散化
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>