数据库可编程性;存储过程;函数;触发器


mysql的可编程性通常体现在 存储过程, 自定义函数, 触发器
一、存储过程 (dos环境需要用delimiter// 修改结束复合)
    1、 解释:
是存储在数据库服务器中,已经经过数据库以便于操作,在通过应用程序对数据库进行相关操作时,只需要发送调用指令即可(耗时操作分担在数据服务器中)。在数据库数据库中执行普通语句速度要远远低于存储过程
             缺点:不同数据库的管理系统的可编程语法不尽相同,可能不兼容
       2、 创建的基本语法:
Create procedure 过程名称(参数列表)
Begin
....
End;
mysql> delimiter //
mysql> create procedure myproceduce()
    -> begin
    -> select"你好";
    -> end;
    -> //
Query OK, 0 ro ws affected (0.05 sec
    3、 存储过程的调用:
            call 过程名称  
call myproceduce();
    4、变量声明 :  
declare var_dno int;  #声明临时变量
    5、 赋值 :
set c= a+b
     6、存储过程分类
         类似Java的方法,在一个过程中包含了一些用于处理某些复杂逻辑的代码片段
              a、无输入输出参数
              b、有输入无输出参数(in可以省略)
create procedure myprocedure2(in vdno int)
BEGIN
    SELECT * from employee where Depno = vdno;
end;
              c、有输入输出参数
/*
输入当前页码,每条页码条数
输出员工表指定数据,总页码数,总数据条数
*/
CREATE PROCEDURE myprocedure5(in yema int,in tiaoshu int ,out zyema int ,out ztiaoshu int)
BEGIN
        DECLARE startnum int;
        SET startnum = yema*tiaoshu-tiaoshu;
        SELECT * from employee LIMIT startnum,tiaoshu;
        SELECT count(*) into ztiaoshu from employee ;
        set zyema = CEILING(ztiaoshu/tiaoshu);
END;
call myprocedure5(2,5,@zyema,@ztiaoshu);
SELECT @zyema,@ztiaoshu
              d,无输入有输出参数
     7、拼接语句
               mysql对拼接语句需要预处理才能执行!!!
BEGIN
    set @v_sql=CONCAT('select * from ',tname);  #拼接SQL语句
    prepare stmt from @v_sql;  #预处理SQL语句
    execute stmt;
    deallocate prepare stmt;   #释放资源
END;
       8、IF-ELSE
BEGIN
    DECLARE v_income DOUBLE ;
    SELECT income into v_income FROM salary WHERE num = vnum;
    if v_income >= 3000
    THEN set v_income = v_income+500;
    ELSEIF v_income<3000
    THEN SET v_income = v_income+2000;
    END if;
UPDATE salary set income = v_income WHERE num = vnum;
End
    9、case
    case 1 THEN
        SELECT '超级管理员';
    CASE 2 THEN
        SELECT '普通用户';
    ELSE
        SELECT '无权访问';
    END CASE;
    10、循环
        a、while             
#while循环
CREATE PROCEDURE myprocedure6 (vcount INT)
BEGIN
        DECLARE i int DEFAULT 0;
        WHILE i<vcount DO
        INSERT into department(depname) VALUES (CONCAT('部门',i));
        set i=i+1;
    END WHILE;
END;

call myprocedure6(10);
        b、loop
create procedure myprocedure8 (vcount INT)
BEGIN
    DECLARE i int  DEFAULT 0;
    myloop1:LOOP
        INSERT INTO department(remark) VALUES(CONCAT('小垃圾',i));
        set i=i+1;
        if i>=vcount THEN
            LEAVE myloop1;
        end if;
    end loop;
END
CALL myprocedure8(4);
        c、repeat
CREATE PROCEDURE myprocedure9(vcount INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    REPEAT
        INSERT INTO department (depName,remark) VALUES (CONCAT('小辣鸡',i),CONCAT('大辣鸡',i));
        set i = i+1;
    UNTIL i>vcount
    END REPEAT;
END;
call myprocedure9(3);
二、自定义函数
     1、解释:
          Oracle中差别

SQL SERVER中:
本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。  
     函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 
      1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。  
      2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象。  
      3.    存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。  
      4.    当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。  
      Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。
     2、 创建的基本语法:
create function f()
returns varchar(64)
begin
    return'helloworld';
end;
############
select f();
    3、比较大小
CREATE FUNCTION f1(num1 int,num2 int)
RETURNS int
BEGIN
    if num1>num2    
        then return num1;
    ELSE    
         RETURN num2;
    end if;
end;
##########
SELECT f1(2,3);

三、触发器
    在对某些表执行更新操作(insert,update,delete)时同时出发一些其他动作。mysql不允许在同一个表上绑定同一个类型的触发器。
     1、 创建的基本语法:
#查询有哪些触发器
#select trigger_schema,trigger_name from information_schema.triggers;
#创建触发器
create trigger trg_01 #创建一个触发器trg_01
after delete          # 执行后出发
on employee           # 绑定到employee表中
for each row          #行级出发
BEGIN
    insert into tb_log(msg) values('员工数据被删除');
    #不能在触发器进行select操作
END;
     2、new,old 基本语法:
create trigger trg_empoff
after delete
on emloyee
for each row
BEGIN
    insert into emp_off(num,name,tel,email,birth) values(old.num,old,name,old.tel,old,email,old.birth);
END;



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
作为企业级大型、通用对象关系型数据库管理系统,神通数据库为用户提供的功能包括: • 支持丰富的数据类型 神通数据库所支持的数据类型包括:字符串类型、位串类型、精确数值类型、布尔型、近似数值类型、 日期类型、时间间隔类型、货币类型、二进制大对象、字符型大对象等。 • 提供功能强大的内置函数 神通数据库系统提供了丰富的内置函数,并可以根据用户的实际需要,定制特殊的函数。系统提供的内 置函数主要包括:数学函数、字符串函数、日期时间函数、类型转换函数聚集函数等。 • 支持视图 神通数据库对数据视图提供了完善的支持,从而允许不同的用户或应用程序以不同的方式查看同一数 据。该项功能不仅使数据更易于访问,而且可以利用它限制某些用户能够查看或更新的行和列。视图可以有 效地减少数据库的数据冗余,并为实现灵活的数据安全机制提供了基础。 • 支持存储过程 使用数据库创建应用程序时,过程语言是应用程序和数据库之间的主要编程接口。神通数据库所提 供的过程语言是 plOSCAR。在使用 plOSCAR 程序时,可用两种方法存储和执行程序。可以在本地存储程 序,并创建向数据库发送命令并处理结果的应用程序;也可以将程序在数据库存储存储过程,并创建执 行存储过程并处理结果的应用程序。 • 完整约束机制 神通数据库使用约束来自动强制数据库完整的方式。约束定义关于列允许值的规则,是强制完整 的标准机制。在神通数据库,支持五类约束: NOT NULL 指定不接受 NULL 值的列。 CHECK 约束对可以对放入列的值进行限制,以强制执行域的完整。 UNIQUE 约束在列集内强制执行值的唯一。 PRIMARY KEY 约束标识列或列集,这些列或列集的值唯一标识表的行。 FOREIGN KEY 约束标识表之间的关系。 • 支持触发器 在神通数据库系统触发器是一种特殊类型的存储过程,它在指定的表的数据发生变化时自动生效 被触发执行。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并 9 可以包含复杂的 plOSCAR 语句。神通数据库触发器按照所触发动作的间隔尺寸可以分为语句级触发器和行 级触发器触发器由 CREATE TRIGGER 语句定义,FOR EACH 子句定义了触发动作的间隔尺寸,它既 可以是 FOR EACH STATEMENT(语句级触发器),也可以是 FOR EACH ROW(行级触发器)。 • 支持事务处理 神通数据库提供了高效的事务管理机制,保证每个事务的完整。该机制提供: 锁定机制,使事务相互隔离。 记录机制,保证事务的持久。即使服务器硬件、操作系统或数据库自身出现故障,也可以在重新启动 时使用事务日志,将所有未完成的事务自动地回滚到系统出现故障的位置。 事务管理特,强制保持事务的原子和一致。事务启动之后,就必须成功完成,否则数据库系统将 撤消该事务启动之后对数据所作的所有修改。 在神通数据库一个事务可以由一条或多条 sql 语句构成。事务的提交状态可以是自动提交也可以是手 动提交。有关事务的控制命令包括 BEGIN,COMMIT,ROLLBACK。 • 支持模式 一个数据库可以包含一个或多个命名的模式,一个模式内可以包含多个表。不同的模式的表名可以相 同,而同一模式的表不能同名。模式如同操作系统级的目录,但是模式不能嵌套。 用户在相应权限控制下可以访问所连接的数据库的任何模式的对象。 模式具有以下特点: 多个用户使用同一数据库而不会互相影响。 对数据库的对象进行逻辑分组,更便于管理。 各个应用分别使用各自的模式,以避免命名冲突。 在模式创建数据库对象或访问模式的对象时,可在对象名前指定模式名。 • 支持数据备份和恢复 神通数据库的备份/恢复工具具有图形化的操作界面。用户利用备份工具可以对整个数据库、指定数据 库、或者指定库的特定表执行备份操作。备份的数据被保存在用户指定的目录。利用备份文件,用户可 以利用配套的恢复工具执行恢复操作。备份和恢复工具都提供丰富的选项,以满足不同用户的备份和恢复要 求。 • 支持数据迁移 神通数据库的数据导入和导出向导是前台管理工具的一个实用工具,其主要功能是进行神通数据库 与其它各种异构数据源之间数据的析取、转换以及合并。数据导入和导出工具支持的数据源包括:神通数据 库、Oracle、Microsoft SQL Server、IBM DB2、Microsoft Excel 97-2000、文本文件、其他支持 ODBC 的 数据源。在数据的转换过程,向导能根据源数据和目标数据具体类型,通过内置的转换规则提供数据类型 的默认映射关系、数据类型的精度匹配、空与非空信息提取、主键及相关索引建立等辅助功能,帮助用
第1章 简介 1.1 谁是本书的读者 1.2 本书的内容 1.3 需求 1.4 SQL Server 2000的新特 1.4.1 改进了对Web的支持 1.4.2 改进了伸缩能力和可靠 1.4.3 改进了开发和管理环境 1.5 样本数据库 1.5.1 样本数据库安装 1.5.2 样本数据库的设计目的和设计思想 1.5.3 数据库图解 1.6 小结 第2章 关系数据库概念和SQL Server环境 2.1 数据库 2.1.1 关系数据库 2.1.2 数据库对象 2.1.3 什么是存储过程 2.2 SQL Server 2000的工具 2.2.1 Service Manage 2.2.2 Query Analyze 2.2.3 Enterprise Manage 2.2.4 DTS--导入和导出数据 2.2.5 osql和isql 2.2.6 SQL Server Profile 2.2.7 客户端网络实用工具 2.2.8 帮助子系统和SQL Server Books Online 2.3 存储过程的基本操作 2.3.1 通过Query Analyzer执行存储过程 2.3.2 通过Enterprise Manager管理存储过程 2.3.3 在Enterprise Manager编辑存储过程 2.3.4 在Query Analyzer编辑存储过程 2.3.5 语法错误 2.3.6 Create Stored Procedure Wizar 2.4 小结 2.5 练习 第3章 存储过程设计概念 3.1 存储过程的结构 3.1.1 组成 3.1.2 功能 3.1.3 语法 3.2 存储过程的类型 3.3 编译 3.3.1 编译和执行过程 3.3.2 执行规划的重用 3.3.3 重编译存储过程 3.3.4 存储存储过程 3.4 管理存储过程 3.4.1 列举存储过程 3.4.2 查看存储过程 3.4.3 重命名存储过程 3.4.4 删除存储过程 3.4.5 查看相关和有依赖关系的对象 3.5 存储过程数据库应用开发的作用 3.5.1 增强数据完整 3.5.2 复杂商业规则和约束的一致实现 3.5.3 模块化设计 3.5.4 可维护 3.5.5 减少网络流量 3.5.6 更快的执行 3.5.7 增强了安全 3.6 小结 3.7 练习 第4章 Transact-SQL编程基础 4.1 TSQL标识符 4.2 数据库对象限定词 4.3 数据类型 4.3.1 数据类型的分组 4.3.2 数据类型的同义词 4.3.3 用户定义的数据类型 4.4 变量 4.4.1 局部变量 4.4.2 全局变量 4.4.3 table(表)变量 4.5 流控制语句 4.5.1 注释 4.5.2 语句块-Begin...End 4.5.3 条件执行--If语句 4.5.4 循环--While语句 4.5.5 无条件执行--GoTo语句 4.5.6 调度执行--WaitFor语句 4.6 光标 4.6.1 Transact-SQL光标 4.6.2 与光标有关的语句和函数 4.6.3 使用光标带来的问题 4.6.4 合理使用光标 4.7 小结 4.8 练习 第5章 函数 5.1 使用函数 5.1.1 用于选择和赋值 5.1.2 用于过滤规则 5.1.3 用于表达式 5.1.4 作为检查和默认的约束 5.1.5 替代表 5.2 函数的类型 5.2.1 标量函数 5.2.2 集合函数 5.2.3 行集合函数 5.3 小结 5.4 练习 第6章 复合Transact-SQL 结构--批处理、脚本和事务 6.1 批处理 6.1.1 使用批处理 6.1.2 批处理与出错 6.1.3 DDL批处理 6.2 脚本 6.2.1 数据库脚本编程 6.3 事务概念 6.3.1 自动提交的事务 6.3.2 显式事务 6.3.3 隐式事务 6.3.4 事务处理的结构 6.3.5 嵌套的事务 6.3.6 已命名的事务 6.3.7 保存点 6.3.8 锁定 6.3.9 事务隔离级别和提示 6.3.10 分布式事务 6.3.11 典型的出错 6.4 小结 6.5 练习 第7章 调试和出错处理 7.1 调试 7.1.1 什么是“bug” 7.1.2 调试过程 7.1.3 调试工具和技术 7.1.4 典型的出错 7.2 出错处理 7.2.1 使用出错处理 7.2.2 为何要自寻烦恼 7.2.3 出错处理的策略 7.2.4 一种通用的出错处理方法 7.2.5 XACT_ABOR 7.2.6 Raiserro 7.3 小结 7.4 练习 第8章 确定专业的编程风格 8.1 源代码控制的概念 8.1.1 Microsoft Visual SourceSafe简介 8.1.2 管理Visual SourceSafe数据库 8.1.3 往Visual SourceSafe添加一个数据库 8.1.4 管理存储过程 8.1.5 Visual SourceSafe Explore 8.2 命名约定 8.2.1 为何要自寻烦恼 8.2.2 命名变量和对象 8.2.3 建议的命名约定 8.3 小结 第9章 特殊类型的过程 9.1 存储过程和类型 9.1.1 用户定义的存储过程 9.1.2 系统存储过程 9.1.3 扩展的存储过程 9.1.4 临时存储过程 9.1.5 全局临时存储过程 9.1.6 远程存储过程 9.2 用户定义的函数 9.2.1 用户定义函数的设计 9.2.2 表值用户定义函数 9.2.3 行内的表值用户定义函数 9.2.4 在Enterprise Manager管理用户定义的函数 9.3 触发器 9.3.1 物理设计 9.3.2 多记录上的修改操作 9.3.3 嵌套触发器和递归触发器 9.3.4 触发器的限制 9.3.5 SQL Server 2000触发器 9.3.6 管理触发器 9.3.7 设计触发器的建议 9.3.8 触发器的事务管理 9.3.9 使用触发器 9.4 小结 9.5 练习 第10章 高级存储过程编程技术 10.1 动态地构造查询 10.1.1 执行一个串 10.1.2 通过窗体查询 10.1.3 使用sp_executesql存储过程 10.2 使用时间戳的乐观锁 10.2.1 时间戳 10.2.2 TSEQUAL函数 10.2.3 时间戳转换 10.3 全文搜索和索引 10.4 嵌套的存储过程 10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与触发器 10.6.3 序列号表 10.6.4 在一个临时表保存标识值 10.7 GUI 10.8 使用MIN或MAX函数的While循环 10.9 属管理 10.10 小结 10.11 练习 第11章 与SQL Server环境的交互 11.1 OLE Automation对象的执行 11.1.1 sp-OACreat 11.1.2 sp-OAMetho 11.1.3 sp-OASetPropert 11.1.4 sp_OAGetPropert 11.1.5 sp-OADestro 11.1.6 sp_OAGetErrorInf 11.1.7 数据类型转换 11.2 运行程序 11.3 运行Windows脚本文件 11.4 与NT Registry的交互 11.4.1 Registry子树 11.4.2 键和子键 11.5 Registry和SQL Server 11.5.1 xp_regrea 11.5.2 xp_regwrit 11.5.3 xp_regdeletevalu 11.6 作业 11.6.1 作业的管理 11.6.2 Job Scheduler的可选方法 11.6.3 用于维护作业的存储过程 11.6.4 操作员和报警 11.7 SQL Server和Web 11.7.1 Web Assistan 11.7.2 Web任务存储过程 11.7.3 sp_makewebtas 11.7.4 sp_runwebtas 11.7.5 sp_dropwebtas 11.7.6 Web页模板 11.8 串模板 11.8.1 xp_sprint 11.8.2 xp_sscan 11.9 邮件 11.9.1 用于E-Mail工作的扩展存储过程 11.9.2 xp_sendmai 11.9.3 xp_readmai 11.9.4 sp_processmai 11.10 数据库部署 11.10.1 在以前的环境 11.10.2 在新版本的环境 11.11 安全 11.11.1 安全结构 11.11.2 实现安全 11.11.3 登录和用户名的同步 11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 11.11.5 使用一个代理用户来管理应用程序安全 11.11.6 使用应用程序角色来管理应用程序安全 11.12 小结 11.13 练习 第12章 SQL Server 2000的XML支持 12.1 XML的变迁 12.2 XML简介 12.2.1 标记语言简介 12.2.2 构造标记语言的块 12.2.3 XM 12.2.4 XML文档质量 12.2.5 XML解析器和DOM 12.2.6 XML的链接和查询 12.2.7 转换XML 12.3 为何使用XML 12.3.1 用于单位之间的信息交换 12.3.2 信息发布 12.4 SQL Server的XML支持 12.4.1 Transact-SQL语言扩展 12.4.2 OPENXM 12.4.3 使用XML发布数据库信息 12.5 小结 12.6 练习 附录A SQL Server 2000的T-SQL和XML数据类型 附录B 练习答案

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值