剑指Offer——常用SQL语句、存储过程和函数

本文介绍了MySQL数据库中的常用SQL语句及存储过程的应用。包括如何建立多对多关系的数据表、用户授权管理等基本操作。重点讲解了存储过程的概念、创建及执行方法,以及它们在提高执行效率和安全性方面的作用。


一、常用SQL语句

  1. 在MySQL数据库建立多对多的数据表关系

  2. 授权、取消授权

grant select, insert, update, delete on testdb.* to common_user@’%’;
revoke all on *.* from dba@localhost;
create user guest@localhost identified by '123456'grant select on mydb.* to guest@localhost;
drop user guest;
  1. 数据库四大类语言

二、存储过程

2.1 存储过程简介

我们常用的数据库操作语言SQL语句在执行的时候需要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程通常有以下优点:

  • 存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
  • 存储过程允许标准组件式编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
  • 存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
  • 存储过程能够减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大降低了网络流量并降低了网络负载。
  • 存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

创建存储过程

delimiter $$
create procedure procedure_bill()
comment '查询所有销售情况'
begin
select billid, tx_time, amt from lm_bill;
end $$
delimiter;

显示存储过程状态

show procedure status like 'procedure_bill';
show procedure status;

执行存储过程

call procedure_bill;

注:

  • 这里需要注意的是DELIMITER //和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以";“为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将”;"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
  • 存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
  • 过程体的开始与结束使用BEGIN与END进行标识。

含参数的存储过程

create procedure p2(n int)    #含参
begin
select  * from t_category where cid > n;
end $

这里写图片描述

  • IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值;
  • OUT 输出参数:该值可在存储过程内部被改变,并可返回;
  • INOUT 输入输出参数:调用时指定,并且可被改变和返回;

三、函数

函数

第一部分、 基础 1、创建数据库 2、删除数据库 3、备份sql server 4、创建新表 5、删除新表 6、增加一个列 7、添加删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分、 提升 1、复制表 2、拷贝表 3、跨数据库之间表的拷贝 4、子查询 5、显示文章、提交人最后回复时间 6、外连接查询 7、在线视图查询 8、between的用法 9、in 的使用方法 10、两张关联表,删除主表中已经在副表中没有的信息 11、四表联查问题 12、日程安排提前五分钟提醒 13、一条sql 语句搞定数据库分页 14、前10条记录 15、选择每组中的最大数 第三部分、 技巧 1、True/False的使用 2、收缩数据库 3、压缩数据库 dbcc shrinkdatabase(dbname) 4、转移数据库给新用户以已存在用户权限 5、检查备份集 6、修复数据库 7、日志清除 8、更改某个表 9、存储更改全部表 10、SQL SERVER中直接循环写入数据 数据开发-经典 1.按姓氏笔画排序 2.数据库加密 3.取回表中字段 4.查看硬盘分区 5.比较A,B表是否相等 6.杀掉所有的事件探察器进程 7.记录搜索: 9:获取当前数据库中的所有用户表 10:获取某一个表的所有字段 11:查看与某一个表相关的视图、存储过程函数 12:查看当前数据库中所有存储过程 13:查询用户创建的所有数据库 14:查询某一个表的字段数据类型 15:不同服务器数据库之间的数据操作 SQL Server基本函数 SQLServer2000同步复制技术实现步骤 一、 预备工作 二、 正式配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No Silver Bullet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值