- 浏览: 1020104 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
触发器:
本质是一个存储过程
select * from users
--drop trigger reminder
禁止插入行政部新员工
create trigger inse03
on yuangong for insert
as
begin
if (select count(*) from inserted where 部门='' )>0
begin
rollback
print '不能插入新记录'
end
end
删除触发器:
create trigger 名称
on 表名 for delete
as
begin
代码
end
更新触发器:
用到临时表: 两个:
inserted
deleted
create table 学生表
(
姓名 nvarchar(8) not null primary key,
性别 nvarchar(2) not null ,
年龄 tinyint
)
create table 人数表
(
性别 nvarchar(2),
人数 int
)
insert 人数表 values ('女',0)
insert 人数表 values ('男',0)
select * from 学生表
select * from 人数表
select * from 学生表
select * from 人数表
select * from 学生表
select * from 人数表
insert into 学生表 values ('小孙','女',20)
insert into 学生表 values ('小纪','女',19)
delete from 学生表 where 性别='女'
本质是一个存储过程
常见的触发器类型:
插入触发器 insert
删除触发器 delete
更新触发器 update
插入触发器 insert
删除触发器 delete
更新触发器 update
插入触发器:
语法:
select * from users
insert into users values ('张三','男',20,40)
例:禁止插入新记录
alter trigger inse01
on users for insert
as
begin
if exists( select * from inserted) 或者写成 count(*)
rollback
print '禁止插入新员工信息'
end
on users for insert
as
begin
if exists( select * from inserted) 或者写成 count(*)
rollback
print '禁止插入新员工信息'
end
insert into users values ('张三风','男',20,40)
select * from users
select * from users
--simpletrigger.sql
--简单的触发器
use northwind
--简单的触发器
use northwind
例:
alter trigger 简单触发器 on dufei for insert as
declare @ID int,@username nvarchar(50)
set @ID = @@identity
set @username = (select username from dufei whereID=@ID)
print '最后写入的记录的编号是:' + convert(nvarchar,@ID) + ' 用户名是:' + @username
go
insert dufei (username) values('吴小华')
alter trigger 简单触发器 on dufei for insert as
declare @ID int,@username nvarchar(50)
set @ID = @@identity
set @username = (select username from dufei whereID=@ID)
print '最后写入的记录的编号是:' + convert(nvarchar,@ID) + ' 用户名是:' + @username
go
insert dufei (username) values('吴小华')
但如果在print 后加一个rollback结果就不同了。说明是手插入到表中了,但又回滚了。
select @@identity
create table dufei
(id int identity(1,1),
username varchar(10))
create table dufei
(id int identity(1,1),
username varchar(10))
--drop trigger reminder
insert into employees(LastName,FirstName)
values('hahaha1','xixixi1')
values('hahaha1','xixixi1')
select * from employees
--禁止触发器
alter table employees disable trigger reminder
--启用触发器
alter table employees enable trigger reminder
select * from employees
alter table employees disable trigger reminder
--启用触发器
alter table employees enable trigger reminder
select * from employees
解除触发器:(删除触发器)
drop trigger 名称
drop trigger inse01
drop trigger 名称
drop trigger inse01
禁止插入行政部新员工
alter trigger inse02
on yuangong for insert
as
begin
if exists(select * from inserted where 部门='行政部' )
begin
rollback
print '你的权限不够,不能插入行政部新员工!'
end
end
on yuangong for insert
as
begin
if exists(select * from inserted where 部门='行政部' )
begin
rollback
print '你的权限不够,不能插入行政部新员工!'
end
end
select * from yuangong
delete from yuangong where 姓名='于洋'
delete from yuangong where 姓名='于洋'
insert into yuangong values ('0001','于洋','男',20,'2007-12-26','河南',3000,2000,500,1,'123456','保安部')
count(*)
create trigger inse03
on yuangong for insert
as
begin
if (select count(*) from inserted where 部门='' )>0
begin
rollback
print '不能插入新记录'
end
end
drop trigger inse03
insert into yuangong values ('0001','于洋','男',20,'2007-12-26','河南',3000,2000,500,1,'123456','保安部')
删除触发器:
create trigger 名称
on 表名 for delete
as
begin
代码
end
用到一个临时表: deleted 存放的是准备删除的记录
禁止删除技术部的员工
alter trigger del01
on yuangong for delete
as
begin
if exists(select * from deleted where 部门='人事部')
begin
rollback
print '不能删除人事部员工'
end
end
on yuangong for delete
as
begin
if exists(select * from deleted where 部门='人事部')
begin
rollback
print '不能删除人事部员工'
end
end
select * from yuangong
delete from yuangong where 编号='0006'
delete from yuangong where 编号='0006'
更新触发器:
用到临时表: 两个:
inserted
deleted
禁止用户更新:
create trigger upd01
on yuangong for update
as
begin
if exists(select * from inserted)
begin
rollback
print '不允许更改数据!'
end
end
create trigger upd01
on yuangong for update
as
begin
if exists(select * from inserted)
begin
rollback
print '不允许更改数据!'
end
end
禁止更新基本工资和奖金
create trigger upd01
on yuangong for update
as
begin
if update(基本工资) or update(奖金)
begin
rollback
print '不允许更改数据!'
end
end
on yuangong for update
as
begin
if update(基本工资) or update(奖金)
begin
rollback
print '不允许更改数据!'
end
end
select * from yuangong
update yuangong set 年龄=30 where 姓名='于洋'
Create unique ix_name on hr (姓,名)
create [unique][clustered][nonstered] index on 数据表名称(列名称)
只允许更改姓名,性别,年龄
Create unique ix_name on hr (姓,名)
create [unique][clustered][nonstered] index on 数据表名称(列名称)
只允许更改姓名,性别,年龄
create trigger upda02
on yuangong for update
as
begin
if update(姓名) or update(性别) or update (年龄)
begin
commit
end
else
begin
rollback
print '不能修改姓名,性别,年龄之外的数据'
end
end
on yuangong for update
as
begin
if update(姓名) or update(性别) or update (年龄)
begin
commit
end
else
begin
rollback
print '不能修改姓名,性别,年龄之外的数据'
end
end
select * from yuangong
update yuangong set 姓名='于小洋',性别 ='女',年龄=30 where 姓名='于洋'
update yuangong set 姓名='于小洋',性别 ='女',年龄=30 where 姓名='于洋'
update yuangong set 编号='0008' where 姓名='于小洋'
create table 学生表
(
姓名 nvarchar(8) not null primary key,
性别 nvarchar(2) not null ,
年龄 tinyint
)
create table 人数表
(
性别 nvarchar(2),
人数 int
)
insert 人数表 values ('女',0)
insert 人数表 values ('男',0)
drop TABLE 学生表
select * from 学生表
select * from 人数表
create trigger test2
on 学生表 for insert
as
begin
if exists (select * from inserted where 性别='男')
begin
update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='男')
where 性别='男'
end
else
begin
if exists (select * from inserted where 性别='女')
begin
update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='女')
where 性别='女'
end
end
end
on 学生表 for insert
as
begin
if exists (select * from inserted where 性别='男')
begin
update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='男')
where 性别='男'
end
else
begin
if exists (select * from inserted where 性别='女')
begin
update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='女')
where 性别='女'
end
end
end
select * from 学生表
select * from 人数表
insert into 学生表 values ('小王','男',20)
insert into 学生表 values ('小胡','男',19)
insert into 学生表 values ('小胡','男',19)
alter trigger upd001
on 学生表 for insert
as
begin
update 人数表 set 人数=人数+1 where 性别 in (select 性别 from inserted )
end
on 学生表 for insert
as
begin
update 人数表 set 人数=人数+1 where 性别 in (select 性别 from inserted )
end
drop trigger test2
select * from 学生表
select * from 人数表
insert into 学生表 values ('小孙','女',20)
insert into 学生表 values ('小纪','女',19)
delete from 学生表 where 性别='女'
实现删除学生记录
create trigger dele01
on 学生表 for delete
as
if exists(select * from deleted)
begin
update 人数表 set 人数=(select count(*) from 学生表 where 性别='男') where 性别='男'
update 人数表 set 人数=(select count(*) from 学生表 where 性别='女') where 性别='女'
end
测试: 分开删除
on 学生表 for delete
as
if exists(select * from deleted)
begin
update 人数表 set 人数=(select count(*) from 学生表 where 性别='男') where 性别='男'
update 人数表 set 人数=(select count(*) from 学生表 where 性别='女') where 性别='女'
end
测试: 分开删除
发表评论
-
SQL Server复制的缺陷
2011-02-25 13:12 1250SQL Server复制是最常见的 ... -
SQL SERVER 查看当前数据库系统设置概览
2011-02-24 10:43 1341sql server 数据库查看当系统概览可以在“查询”视图中 ... -
SQL 2005 Reporting Service 出现:“提供程序加载失败”(Provider Load failure)的解决方法
2011-02-23 00:28 1437错误描述:操作系统:windows server 2003 E ... -
安装SQL SERVER 2008出现 RebootRequiredCheck Fail 问题解决
2011-01-26 15:09 2747在安装Sql Server 2008 Enterprise时出 ... -
SQLServer和Oracle的常用函数对比
2011-01-12 00:09 9841.绝对值 S:selectabs(-1) value O ... -
用CROSS APPLY解开了困扰我一年多的一个问题
2011-01-11 01:16 1201假设有一个表叫SongsTop ... -
DBCC命令
2011-01-11 01:06 1229今天把DBCC命令都一一使用了一下,做了笔记,防止忘记. 在 ... -
sql server 查看执行效率低下的语句
2011-01-11 00:54 1664就是在测量功能时,先以下命令清除sql server的缓存 ... -
MSSQL 生成編號 --整理帖
2011-01-11 00:48 974-->Title:得到普通流水 ... -
怎样才能充分利用SQL索引
2011-01-11 00:43 770怎样才能充分利用SQL索引 背景:目前WEB的普及太 ... -
MSSQL聚集索引與非技術索引設計指南
2011-01-11 00:41 944(一)聚集索引设计指南 聚集索引基于数据行的键值在表内排序 ... -
索引的魅力
2011-01-11 00:32 924今天有空,来测试一下mssql2005的一条查询语句在聚集索、 ... -
sql server 2005的一些动态函数
2011-01-11 00:23 1085所有对象:SELECT name, object_id, pr ... -
Sql server 国际化的支持,查询乱码
2011-01-11 00:20 2271如果 Sql server 2005 的数据库字符集是非 ... -
SQL Server 2005中使用DDL触发器监控数据库变化
2011-01-11 00:12 1522添加,删除或修改数据库的对象,一旦误操作,可能会导致大麻烦,需 ... -
SQLServer2005新的高效分页方法
2011-01-10 23:58 972Select * FROM ( select ROW_NUM ... -
谈SQL Server标识列
2011-01-08 23:30 1327一、标识列的定义以及 ... -
SQL Server中临时表与表变量的区别
2011-01-08 22:02 2430我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就 ... -
SQL2005误删除数据的恢复方法
2011-01-06 01:56 1353由于同事写错作业脚本,导致昨天晚上系统当中一张重要表的大概2 ... -
SQL SERVER 2005中的同步复制技术
2011-01-06 01:54 1179一、准备工作: 1.建立一个 WINDOWS 用 ...
相关推荐
标题“SQLServer2005_US_all示例”揭示了这是一个关于Microsoft SQL Server 2005的示例集合,特别强调的是美国英文版本。SQL Server是微软公司开发的一款关系型数据库管理系统(RDBMS),它广泛应用于数据存储、管理...
而脚本则是一系列实际的SQL命令,你可以运行它们来体验SQL Server 2005的功能。 总的来说,SQL Server 2005基础教程将引导你进入数据库管理的世界,帮助你掌握这个强大工具的核心知识。通过理论学习和实践操作,你...
SQL Server 2005支持T-SQL(Transact-SQL)编程语言,用于编写数据库查询、存储过程和触发器等。它还引入了集成的开发工具——SQL Server Management Studio(SSMS),为数据库管理员和开发者提供了一个统一的图形化...
SQL Server 2005是Microsoft公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面表现出色。这款系统以其强大的功能、易用性和灵活性深受广大IT专业人员喜爱。本教程针对SQL Server 2005中文版...
是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作 全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。 本系列图书中文版得到了微软...
此系列可能包含了关于SQL Server 2005的安装、配置、性能优化、备份恢复、安全性设置、数据库设计、T-SQL编程、存储过程、触发器、视图、索引、事务处理、并发控制等众多主题。 "查看本次课程问题解答.url"可能是一...
在性能优化方面,SQL Server 2005提供了一系列工具和技巧,例如索引优化、查询优化器、统计信息的更新以及查询计划的分析。通过调整索引策略、减少数据争用、优化查询语句,可以显著提升数据库系统的整体性能。 ...
"SQL Server 2005盛宴系列03"是一个针对该系统的视频教程,专注于Adventure Works示例数据库的介绍。这个教程可能是为了帮助初学者或有经验的DBA(数据库管理员)更好地理解和使用SQL Server 2005的功能。 ...
压缩包中的"[SQL.Server.2005数据库简明教程].tscc.exe"可能是一个教学软件或电子书,它将涵盖这些基础知识,并通过实例教你如何使用SQL Server 2005。通过学习这个教程,你将能够掌握SQL Server的基本操作,为更...
在SQL Server数据库中,约束和触发器各有其适用场景和优势。约束实现方法简单有效,适合实现简单的需求如主键、外键和域完整性要求。触发器则可以包含使用T-SQL代码的复杂处理逻辑,适用于实现复杂的、涉及多表的...
《SQL Server 2005应用开发技术与典型实例》采用案例教学的形式,由浅入深、循序渐进地介绍了SQL Server 2005数据库平台的知识体系。全书分为15章:第1章和第2章介绍SQL Server 2005的基本知识及管理和开发工具:第3...
标题“SQL2000SampleDb_sqlserver_solidt5v_”暗示了这是一个与SQL Server 2000相关的示例数据库文件,可能包含了用于教学或演示目的的数据和脚本。"solidt5v"可能指的是特定版本或特征,但在这里没有明确的解释。...
SQL Server 2005是微软推出的一款关系型数据库管理系统,它在企业级数据管理和开发领域扮演着重要的角色。此压缩包包含的资源是针对初学者的SQL2005基础教程,以及针对数据库管理与开发的专业电子教案,旨在帮助学习...
《SQL Server 2005 教学课件》是一套详尽的教育资源,旨在帮助学习者深入理解和掌握Microsoft SQL Server 2005这一重要的关系数据库管理系统。SQL Server 2005作为微软公司推出的数据库平台,在企业级数据管理和分析...
"数据库应用技术——SQL Server 2005篇(第2版)-教案.rar" 文件可能包含教师教学所需的详细资料,如课程大纲、课件、案例分析及教学方法,有助于教师进行课程设计和课堂教学。这些教案通常会按照章节结构编排,每个...
《SQL Server 2005数据库简明教程》是一份专为教学设计的PPT教程,涵盖了SQL Server 2005的主要功能和操作。这个教程由一系列的PPT文件组成,包括对数据库管理、表操作、Transact-SQL语言、视图管理、触发器、权限...
2. **Transact-SQL (T-SQL)**:作为SQL Server的扩展语言,用于执行数据查询、更新、插入和删除操作,以及创建存储过程和触发器等复杂数据库对象。 3. **数据库引擎**:负责处理所有与数据相关的操作,包括数据的...
SQL Server 2005教学用PPT,内容非常全面,总共分十三章。 SQL Server 2005 第1章 SQL Server 2005关系数据库简介 第2章 服务器管理 第3章 Transact-SQL语言 第4章 数据库管理 第5章 表的操作与管理 第6章 ...
### SQL Server 2005基础教程知识点梳理 #### 一、概述 - **教材信息**:本教材为清华出版的《SQL Server 2005基础教程》电子教案,以PDF格式呈现。 #### 二、教学目标 - **理解数据库的重要性**:明确为何在现代...