SQL server从入门精通----触发器

-----触发器-------------------
        ---触发器:是一种特殊的存储过程,是在某个操作发生自动执行的一个操作
select * from Q_user
--------------insert 触发器--------------
    if(OBJECT_ID(‘tr_insert‘,‘tr‘)) is not null
    drop trigger tr_insert

    create trigger tr_insert
    on Q_user  --基于哪个表创建的触发器(就是哪个表在发生插入操作时自动触发)
    for insert --做什么操作时什么时候自动发生
             --操作upate insert delete
             --什么时候 for 正在操作时发生, after 操作之后时发生,instead of 废除当前的操作,执行触发的操作
    as
    --在插Q_user时,同时,插入userInformation
  --   declare @uid varchar(30),@uName varchar(30)
     --select @uid=uid,@uName=uName from  inserted
     ----获取 刚刚操作之后生成对应的行
     ----(insert 代表触发的基于表)
     --insert into userInformation(uid,name) values(@uid,@uName)
     ----也可以insert select 语句
     insert into userInformation(uid,name) select uid,uName from inserted
     go

    --test
    insert into Q_user(uName,uPwd) values(‘触发器‘,‘11111‘)
    select * from userInformation
    ----测试成功

    ------update触发器--------------
    在跟新Q_user标的同事跟新userInformation的 部分字段
    create trigger tr_update
    on Q_user
    after update
    as
      declare @uid varchar(30),@name varchar(30)
      select @uid=uid,@name=uName from  inserted   --获取 刚刚操作之后生成对应的行
      update userInformation set name=@name where uid=@uid

    go
    update Q_user set uName=‘更新触发器‘ where uName=‘触发器‘
    select * from userInformation

    ----delete触发器---------
    因为userInformation里面的uid 是Q_user里面的外键,在不使用级联删除的时候报错

    delete Q_user where uId=‘10002‘ --DELETE 语句与 REFERENCE 约束"DF_uid"冲突。该冲突发生于数据库"Qzone",表"dbo.userInformation", column ‘uid‘

     --级联 就是当一个表和另一个表存在外键的关系时 就可以使用级联更新与删除了
     --但前提是此表设置了级联
     --设置级联的方法 创建级联更新,,     在外键语句后面加   ON   DELETE   CASCADE  ON   UPDATE   NO CASCADE,
                                                             --foreign key (userId) references UserInfo(UserId) on delete cascade

     update  Q_user set uName=‘级联更新‘ where uName=‘更新触发器‘
     select * from Q_user ;
     select * from userInformation

     用触发器实现级联删除

---游标---------
        ---是处理数据的一种方法,可以查看或者处理结果集中的数据
        --利用游标来查询指定区间的数据 (比如查询10-40直接的数据包含10-40)

    print (4.5)
    
时间: 2024-08-08 15:21:36

SQL server从入门精通----触发器的相关文章

SQL server从入门精通---- T-sql基本语句+函数与存储过程

-----------------T_SQL------------------------------ --1.全局变量------------------------------------- print @@identity --最后一次插入的标识值 print @@language --当前使用语言 print @@version --版本号 print @@servername--服务名 --2.自定义变量 ----1.声明用declare declare @i int,@j int

SQL server从入门精通---- 数据基础知识

数据库入门: 数据库的发展:人工管理阶段-----文件管理阶段-----数据库系统阶段 数据系统的组成: 1.数据库(数据)db 2.数据管理系统(软件)dbms 3.数据库管理人员  dba 4.硬件平台   5.软件平台        数据库的3级模式 模式   外模式   内模式   简单点说 模式就是表 外模式就是视图 内模式是物理结构和存储方式一般你是用不到的   3级模式之间的2级映射 模式/外模式映射(逻辑独立性) 外模式/内模式映射(物理独立性) 数据模型 层次模型   网状模型

SQL server从入门精通----表的crud

--单表的简单crud select * from Q_user --查询所有列 select uid,uName,uPwd from Q_user --查询指定列 可以用where 指定条件 select uid,* from Q_user delete Q_user -- 会删除这张表的所有数据 (慎用) 可以用where 指定条件 insert into Q_user values('张三','123','0','0','0','') insert into Q_user(uName,uP

SQL server从入门精通----表的复制与多表连接查询

--select into table2 from table1 --insert into table2 select table1 讲解 create table userInformation ( id int identity(10001,1), uid int, name nvarchar(30), age int, birthday nvarchar(30), address nvarchar(50), country nvarchar(20), province nvarchar(

SQL server从入门精通---- 数据库相关

数据的操作 use master go IF EXISTS(SELECT * FROM sysdatabases WHERE NAME='QZone') --判断数据库是否存在 BEGIN --表示语句块的开始( DROP DATABASE QZone --如果数据库存在先删掉数据库 END --表示语句块的结束) GO CREATE DATABASE QZone --下面的不写的话使用默认配置 ON PRIMARY --创建主数据库文件 ( NAME='QZone', --文件名逻辑名 FIL

SQL server从入门精通----3种分页

--分页语句 --max id分页 select top 4 * from District where id>(select ISNULL(max(id),0) from (select top 2 id from District order by Id) a) --not id 分页 select top 4 * from District where id not in(select top 2 id from District ) --ROW_NUMBER分页 select * fro

SQL server从入门精通---- 事务

-------------事务-------------- --我的理解(执行几条语句时,只要有一条语句执行不成功,其他的语句都不够被执行) --事务:将多个操作当做一个独立的逻辑单元的执行方式为事务------ --特点:多个操作只有在都执行成功时才算成功,只要有一个执行失败那应该整体就属于失败,成功了可以提交,失败了可以回滚 语法 begin transaction tr_insert --开始事物(名称随便取 begin try insert into Q_user(uLogName) v

SQL server从入门精通----内置函数

--聚合函数的补充 --var 求某列的方差 --数学函数 select abs(-1) --绝对值 select CEILING(3.5) select floor(3.5) select round(3.5555,2) select SQRT(4) select square(2) select POWER(2,3) select RAND()*100 -- 日期时间函数 select CURRENT_TIMESTAMP --2015-09-09 22:53:12.727 select GE

SQL server从入门精通----表的操作

1 use Qzone 2 3 --select * from sysobjects where name='Q_user' 4 if OBJECT_ID('Q_user','u') is not null --obejct_id一个根据表sysobjects的方法(对象名,对象类型) 5 drop table Q_user --删除表 6 create table Q_user 7 ( 8 uId int, --identity(10001,1),--主键约束 9 uLogName nvarc