学习笔记(三):游标、触发器

游标
触发器:

触发器的基础知识:
概念:
对表进行插入、更新、删除自动执行的特殊的存储过程
触发器与普通存储过程的区别:
触发器是当对某一个表进行操作,系统会自动调用执行该表上对应的触发器
分类为:
DML
AFTER(之后)
INSERT
UPDATE
DELETE
INSTEAD OF(之前)
DDL
触发器有两种特殊的表:
插入表(INSERTED)
INSERTED表的数据是插入或修改后的数据
删除表(DELECTD)
DELETED表的数据是更新前的或删除的数据
游标:
概念:
使用户可逐行访问由SQL Server返回的结果集。

原因:
    就是把集合操作转换为单个记录处理方式。
优点:
    允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作
    提供对基于游标位置的表中的行进行删除和更新的能力
    游标实际上作为面向集合的数据库管理系统和面向行的程序设计之间的桥梁,是这两种处理方式通过游标沟通起来。
    游标的生命周期:    
        声明
        打开
        读取
        关闭  
        释放
定义游标:
    DECLARE CURSOR_NAME 游标名称
    CURSOR[LOCAL|GLOBAL] 全局、局部
    [FORWARD ONLY|SCROLL] 游标滚动方式
    [READ_ONLY|SCROLL_LOCKS|OPTIMISTIC] 读取方式
    FOR SELECT_STATEMENTS 查询语句
    [FOR UPDATE |OF COLUMN_NAME..] 修改字段
打开游标:
    OPEN CURSOR_NAME
    游标打开后,可以使用全局变量@@CURSOR_ROWS显示读取记录条数
检索游标:
    FETCH CURSOR_NAME
        FETCH FRIST 读取第一行
        FETCH NEXT 读取下一行
        FETCH PRIOR 读取上一行
        FETCH LAST 读取最后一行
        FETCH ABSOLUTE N 读取某一行,
            如果n为正整数,则读取第n条数据
            如果n为负数,则倒数提取第n条数据
            如果n为0,则不读取任何记录
        FETCH PELATIVE N
            如果n为正整数,则读取上次读取记录之后第n条记录
            如果n为负数,则读取上次记录之前第n条记录
            如果n为空,则读取上次读取的记录
关闭游标
    游标打开后,服务器会专门为游标分配一定的内存空间存放游标操作的数据结果集,同时使用游标也会对某些数据进行封锁。所以游标一旦用过,应及时关闭,避免服务器资源浪费。
    关闭游标语句:
        CLOSE[GLOBAL] CURSOR_NAME|CURSOR_FARIBALE_NAME
        CLOSE CURSOR_NAME
删除游标:
    删除游标、释放资源
        语法:
            DEALLOCATE [GLOBAL] CURSOR_NAME|CURSOR_VARIABLE_NAME
            DEALLOCATE CURSOR_NAME
完整的游标实列:
    --存储读取的值
        DECLARE @ID INT,
            @NAME NVARCHAR(20),
            @AGE NVARCHAR(20)
        DECLARE CURSOR_STU
        CURSOR SCROLL FOR
            SELECT ID,NAME,AGE FROM STUDENT
    --打开游标
        OPEN CURSOR_STU
    --读取第一条记录
        FETCH FIRST FROM CURSOR_STU INTO @ID,@NAME,@AGE
    --循环读取游标记录:
        PRINT '读取的数据如下'
        --全局变量 0-FETCH 语句成功。1FETCH 语句失败或此行不再结果集中。2 被提取的行不存在
            WHILE(@@FETCH_STATUS=0)
            BEGIN
                PRINT '编号'+CONVENT(CHAR(5),@ID)+',名称:'+@NAME,@AGE;
            --继续读取下一条记录
                FETCH NEXT FROM CURSOR_STU INTO @ID,@NAME,@AGE
            END
    --关闭游标
        CLOSE CURSOR_STU
    --删除游标
        DEALLOCATE CURSOR_STU

猜你喜欢

转载自blog.csdn.net/Writing_the_future/article/details/82712561