本文已参与「新人创作礼」活动,一起开启掘金创作之路。
什么是存储过程
什么是存储过程?有哪些优缺点?
存储过程是先经过编译并存储在数据库中的一段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):定位查询返回的结果集的特定行,以对特定行进行操作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或浏览、修改任意行中的数据。主要用于交互式应用。