导图社区 数据库编程思维导图
数据库编程思维导图的思维导图,包含嵌入式SQL;过程化SQL:过程化SQL的块结构、变量和常量的定义;存储过程和函数;触发器:T-SQL中的应用、mySQL中的应用。
编辑于2021-11-24 08:20:10数据库编程
嵌入式SQL
了解概念
过程化SQL
过程化SQL的块结构
变量和常量的定义
T-SQL中
全局变量
用于记录SQL sever服务器的状态,不能创建,修改, 只能读取其中的信息使用@@开头
局部变量
用于储存程序执行过程中临时数据,由用户自定义, 使用必须先创建后赋值,以@符号开头
定义
declare @变量名 数据类型
赋值
set @变量名=值
select @变量名=查询语句
Mysql中
系统变量
用于记录数据库服务器的状态不可定义当服务器运行时许多变量可以动态更改通过@@或global来操作系统变量
用户变量
基于会话变量实现的, 可以暂存值, 并传递给同一连接里的下一条sql使用的变量. 当客户端连接退出时,变量会被释放。
定义及赋值
set @变量名=值
局部变量
一般用在sql语句块中,比如存储过程的begin/end其作用域仅限于该语句块
定义
declare 变量名 数据类型
赋值
set 变量名=表达式;
select 变量名 as 表达式;
select 字段 into 变量名 from... where...
流程控制
条件控制语句
if
注意 begin和end
case
循环控制语句
while
注意continue和break的使用
存储过程和函数 (命名块)
存储过程
特点
由过程化SQL语句书写的过程, 经编译和优化后存储在数据库服务器中, 使用时只要调用即可
用户接口
T-SQL中的应用
创建
create procedure 存储过程名 @参数1 参数类型 默认值 是否输出output, ... @参数n参数类型 默认值 是否输出output as <过程化SQL块> go
例1
1. 学习创建存储过程的总体流程, 2. 体会存储过程中的输入参数的定义 3. 体会局部变量定义及应用
例2
增加题目条件,体会多局部变量的定义及应用
例3
增加题目条件,体会存储过程中输出参数的定义及应用
执行
exec 过程名(参数1,...,参数n)
直接执行
简洁版
exec pro_stu '数学'
严谨版
exec pro_stu @cname='数学'
带局部变量的执行
简洁版
declare@aa1 decimal(3,1) exec proc_stu2 '数学', @aa1 output print @aa1
严谨版
declare @aa decimal(3,1) exec proc_stu2 @cname='数学', @gavg=@aa output print @aa
修改
删除
mySQL中的应用
创建
delimiter $$ create procedure 存储过程名 (in/out/inout 参数名 参数类型,...) begin <过程化SQL块> end$$ delimiter ;
例1
学习基本语法
执行
call 过程名(参数1,...,参数n)
直接执行
子主题
带用户变量的执行
少参数会报错, 直接用用户变量补全
call proc_stu('数据结构', @d1); select @d1;
存储过程的输入采用用户变量
set @vv_cname='PASCAL语言'; call proc_stu(@vv_cname, @vd_avg); select @vd_avg;
修改
删除
函数
必须指定返回的类型
T-SQL中的应用
标量值函数定义
create function 函数名(@参数1 参数类型,..., @参数n 参数类型) returns 返回值的数据类型 as begin <过程化SQL块> return 值/表达式 end go
调用
select dbo.函数名(参数1,...,参数n)
直接执行
select dbo.ave_grade('数学');
带局部变量的执行
declare @test_ave1 int select @test_ave1=dbo.ave_grade('数学') print @test_ave1
修改
重命名 ALTER FUNCTION 过程名1 RENAME TO 过程名2; 重新编译 ALTER FUNCTION 过程名 COMPILE;
mySQL中的应用
定义
delimiter $$ create function 函数名 (参数名 参数类型,...) returns 返回值的数据类型 begin <过程化SQL块> return 值/表达式; end$$ delimiter ;
例1
学习基本语法
例2
实际创建及运行
要开启创建功能
查询下具体日志:show variables like'%func%'用以下语句开启创建功能:set global log_bin_trust_function_creators=1;
调用
直接应用
select sno_avg('2017041001');
直接在SQL语句中调用
select *,sno_avg(sno) from studentwhere sno_avg(sno)>60;
过程化SQL中的游标
描述
概念
1、SQL的游标是一种临时的数据库对象, 2、既可以存放储存在数据库表中数据行的副本, 3、也指向数据行的指针
作用
1、遍历数据行;2、保存查询结果,方便下文调用。
操作
(1) 声明游标 (declare) (2) 打开游标 (open) (3) 读取游标 (fetch) (4) 关闭游标 (close) (5) 释放游标 (deallocate)
T-SQL中的应用
----------0游标在存储过程/函数中使用 create procedure 存储过程名 参数 as ----------1声明游标及用到的参数 declare 游标所需参数 declare 游标名 cursor local for select查询 ----------2打开游标 open 游标名 ----------3从游标中获取数据 fetch next from 游标名 into 游标所需参数 ----------4判断游标状态 while(@@FETCH_STATUS=0) begin ... fetch next from 游标名 into 游标所需参数 end ----------5关闭游标 close 游标名 ----------6释放游标 deallocate 游标名 go
例1
掌握游标的使用过程
mySQL中的应用
delimiter **----------0游标在存储过程/函数中使用 create procedure 存储过程名(参数)begin----------1声明游标及用到的参数+循环所用到的指示变量declare 游标所需参数;declare done int default false; /*定义默认值为false的变量,说明工作还没完成*/declare 游标名 cursor for select查询;declare continue handler for not found set done=true; /*找不到下一行时,变量done的值真,即表示done(完成)了*/----------2打开游标 open 游标名;----------3从游标中获取数据 fetch 游标名 into 游标所需参数;----------4判断游标状态 while(not done ) do ... fetch 游标名 into 游标所需参数end while;----------5关闭游标 close 游标名end **delimiter ;
例2
掌握游标的使用过程
触发器
概念
是用户定义在关系表上的一类由事件驱动的特殊过程
1、触发器保存在数据库服务器中2、任何用户对表的增、删、改操作均由服务器自动激活相应的触发器3、触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力
T-SQL中的应用
create trigger 触发器名on 表名for/after/instead [insert/update/update]as 触发动作体 <inserted表和deleted表>go
例1 检查插入的数据是否符合条件
设置为空值
显示错误消息
mySQL中的应用
delimiter // create trigger 触发器名 before/after [delete/insert/update] on 表名 for each row begin 触发动作体 <new和old> end// delimiter ;
例1
before insert触发器
例2
after insert触发器
删除触发器
删除触发器的SQL语法: DROP TRIGGER <触发器名> ON <表名>; 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。