可视化工具Navicat 视图 事物 存储过程

视图 

视图是什么?
  本质是一张虚拟的表
  他的数据来自select语句


有什么用?
  原表安全
  案例: 在一公司中需要一张表保存所有人的薪资信息
  这个表不是所有都能午全看到 老板 财务 可以
  某一个员工 只能看到自己的信息
  所以不能把整个表的信息开发给这个员工

  功能1,影藏部分数据 开放指定的数据
  功能2,因为视图可以将查询结果保存特性 我可以用视图 来达到减少书写sql的次数
  例如:select *from emp where dept_id = (select id from dept where name = "市场");
  要查询市场的人
  将查询结果作为一个视图 以后在使用到这个需求 就直接查看视图

如何使用
  创建视图
    create view test_view as select *from t1;

特点:
  1.每次对视图进行的查询 其实都是再次执行了 as 后面的查询语句
  2.可以对视图进行修改 修改会同步到原表
  3.视图是永久存储的 存储的不是数据 而就是一条 as sql语句

事物 

在mysql中事务 是什么?
是一组sql语句集合
事务的特性
1.原子性
事务是一个整体 不可分割 执行时要么全部执行 要么全部不执行
2.隔离性
事务之间要相互隔离 为了维护数据完整性 : 你有一张银行卡 第一次查看了余额 发现有1000 开开心心买东西去了
买完东西 回来付钱 再一查 发现余额不足 , 原来 你在第一次查询后 你的媳妇把钱转走了
上面这个问题称为不可重复读
如何避免 我在查的时候你不能修改 查询和 修改不能同时进行


因为并发访问 导致的一些问题
1.脏读 一个事物 读到了 另一个事务未提交的数据 查询 之前要保证 所有的更新都已经完成
2.幻读 一个查询事务没有结束时 数据被另一个事务 执行insert delete
3.不可重复读 一个事物在查询 另一个事务在 update

四种隔离级别
读未提交
读已提交
可重复读 默认
串行化

3.一致性
当事务执行后 所有的数据都是完整的(外键约束 非空约束)
4.持久性
一旦事务提交 数据就永久保存


强调: 事务就是一堆sql语句的集合 它们是原子性的 要么全部执行 要么都不执行


mysql这个客户端 默认 开启自动提交 一条sql语句就是一个单独的事务

pymysql 默认是不自动提交 需要手动commit 意思是默认就开启了事务

存储过程
  

存储过程是什么?
  你可以理解为mysql的编程语言

  他的作用 可以将你的程序业务逻辑 放到mysql中来处理
  这样可以降低网络访问次数 从而提高你的程序效率

三种开发的模型
  对于同样一个业务 你可以放到python也可以放到mysql 有什么区别?


  1. 应用程序 处理逻辑
    需要手动编写 sql语句
    优点:执行效率高
    缺点: 开发效率低
    mysql


  2.
  应用程序

    mysql 处理逻辑
    特点: 应用程序开发者不需要需要手动编写 sql语句
    mysql开发者来编写

    优点: 应用程序开发效率高
    缺点: 执行效率略低,沟通成本增高

  3.使用 ORM(object relation map) 对象关系映射
    自动帮你生成对应的sql语句 比如你要注册用户 本来要写insert 语句 现在使用orm调用save(用户对象)
    优点:开发效率高
    缺点:执行效率降低


  存储过程相当于python中的一个函数
  简单地说 学习存储过程就是学习 如何使用mysql编写一个函数

  语法:
  create procedure 过程的名称 ({in,out,inout} 数据类型 参数名称)
  begin
  具体的sql代码
  end
  参数前面需要指定参数的作用
  in 表示该参数用于传入数据
  out 用于返回数据
  inout 即可传入 也可返回

  参数类型是 mysql中的数据类型

案例:创建一个存储过程 作用是将两个整数相加
  create procedure add_p (in a int,in b int)
  begin
  select a + b;
  end

  //
  调用 call add_p(1,2)

案例:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中
  定义一个变量
  set @su = 100;
  create procedure add_p2 (in a int,in b int,out su int)
  begin
  set su = a + b;
  end

  //

  定义变量 set @su = 100;
  调用过程 call add_p2(10,20,@su);

注意 在存储过程中 需要使用分号来结束一行 但是分号有特殊含义
  得将原始的结束符 修改为其他符号
  delimiter // 结束符更换为//
  delimiter;

  mysql中的if语句
  if 条件 then
  代码
  elseif 条件 then
  代码
  else then
  代码
  end if;

案例:
  使用存储过程 完成 输入 一个 数字 1或2 显示 壹 或 贰
  create procedure show_p (in a int)
  begin
  if a = 1 then
  select "壹";
  elseif a = 2 then
  select "贰";
  else
  select "other";
  end if;
  end //

 


  调用存储过程 使用 call 过程名称
  call add_p(10,20);


  其他的流程控制
  switch
  case

  while

  repeat == do while


总结: 实际上一个mysql中的类似函数的东西 我们可以用它实现一些逻辑处理
特点:里面可以包含流程控制语句 和 普通的sql语句

  使用存储过程的优势
    提高应用程序开发效率
    降低网络访问次数



转载于:https://www.cnblogs.com/jianhaozhou/p/9669791.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值