数据库17——存储过程

153 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

什么是存储过程

什么是存储过程?有哪些优缺点?

存储过程先经过编译并存储在数据库中的一段SQL语句的集合。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。

优点:

  • 预先编译,而不需要每次运行时编译,提高了数据库执行效率
  • 封装了一系列操作,对于数据交互比较多的操作对比单独执行SQL语句,可以减少网络通信量
  • 可复用性,减少了数据库开发的工作量;
  • 安全性高,让没有权限的用户通过存储过程间接操作数据库

缺点:

  • 可移植性差,存储过程将应用程序绑定到数据库上;
  • 开发调试复杂:没有好的IDE;
  • 修改复杂
  • 需要重新编译,有时还需要更新程序中的代码以更新调用;

Delete/Drop/Truncate的区别?

  • Delete用来删除表的全部或者部分数据,执行delete时用户需要提交之后才会执行,会触发表上的DELETE触发器(形成一个OLD的虚拟表,可以只读访问被删除的数据),DELETE之后表结构还在,是一行一行地慢慢删,因为会记录日志,可以利用日志还原数据
  • Drop命令从数据库中删除表,所有的数据行索引约束都会被删除;不能回滚不会触发触发器;
  • Truncate删除表中的所有数据不能回滚,也不会触发表上的触发器。操作比DELETE快很多(直接把表drop掉,再创建一个新表,删除的数据不能找回)。如果表中有自增(AUTO_INCREMENT)列,则重置为1

什么是触发器?

触发器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)触发运行的操作(不能被直接调用,不能接收参数)。在数据库以独立的对象存储,用于保证数据完整性(比如可以检验或转换数据)。

有哪些约束类型? 约束(Constraint)类型主键(Primary Key)约束,唯一约束(Unique),检查约束非空约束外键(Foreign Key)约束。

什么是视图?什么是游标?

  • 视图:从数据库的基本表查询出来的数据构成的虚拟表。可以对其进行增/删/改/查等操作,对视图的修改不影响基本表

  • 好处:

    • 保证数据的安全性,可以只给用户访问视图的权限;
    • 简化复杂的SQL操作,隐藏数据的复杂性(比如复杂的连接);
  • 游标(Cursor):定位查询返回的结果集特定行,以对特定行进行操作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动浏览修改任意行中的数据。主要用于交互式应用。