什么是存储过程?
一个存储过程是可以被存储在服务器中的一套程序化的SQL语句,是由SQL语和流程控制语句构成的语句集合,能够实现一些更复杂的数据处理。
我们可以把存储过程看成是一些SQL语句的集合,中间加了点逻辑控制语句。
存储过程的使用场景?
- 当多个客户端应用程序以不同的语言便刺耳或在不同的平台上工作时,需要执行相同的数据库操作。如果不在数据库中实现,则需要在不同的平台上实现多次,加重开发和维护量。
- 当数据安全至关重要时,可以通过存储程序提供一致且安全的环境。例如,银行将存储过程和函数用于所有常见操作。存储程序可以确保正确记录每个操作。在这种设置中,应用程序和用户将无法之间访问数据库表,而只能执行特定的存储程序。
存储过程的优缺点?
优点:首先,存储过程可以一次编译多次运行,这就提升可SQL的执行效率。还有一点,存储过程的安全性强,我们在设定存储过程的时候可以设置对用户的使用权限,这样就和视图一样具有较强的安全性。最后它可以减少网络传输量,因为代码封装到存储中,每次使用只需要调用存储过程即可,这样就减少了网络传输量,同时在相对复杂的数据库操作时,原本每次使用一条一条的SQL语句,可能要连接多次数据库才能完成的操作,现在变成了一次存储过程,只需要连接一次即可。
缺点:存储过程虽然有诸如上面的好处,但缺点也是很明显的。它的可移植性差,存储过程不能跨数据库移植,比如在MySQL,Oracle和SQL Server里编写的存储过程,在换成其他数据库时都需要重新编写。其次调试困难,只有少数DBMS支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容易。此外存储过程的版本管理也很困难,比如数据表索引发生了变化,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。最后它不适合高并发的场景,高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方式,而且对可扩展性要求很高,在这种情况下,存储郭曾会变得难以维护,增加数据库的压力,显然就不适用了。