




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 数据库基础知识 //doc/5447468-5685836.html * 数据库:database,简称 DB(数据库)是依照某种数据模型组织 起来并存放二级存储器中的数据集合。这种数据集合具 有如下特点:尽可能不重复,以最优方式为某个特定组 织的多种应用服务,其数据结构独立于使用它的应用程 序,对数据的增、删、改和检索由统一软件进行管理和 控制。 * 数据库的特点 (1)实现数据共享 (2)减少数据的冗余度 (3)数据的独立性 (4)数据实现集中控制 (5)数据一致性和可维护性,以确保数据的安全性和可靠性。主要 包括: 安全性控制:以防止数据丢失、错误更新和越权使用; 完整性控制:保证数据的正确性、有效性和相容性; 并发控制:使在同一时间周期内,允许对数据实现多路存取, 又能防止用户 之间的不正常交互作用; 故障的发现和恢复:由数据库管理系统提供一套方法,可及时 发现故障和修 复故障,从而防止数据被破坏 * 数据库系统的生命期:分为五个阶段,依次是分析、设计、编码、测试、运 行。 * 数据模型:层次模型,网状模型,关系模型。 *数据库设计:概念结构设计,逻辑结构设计,物理结构设计。 第二章 数据库创建 * 逻辑数据库 数据库对象:表、视图、索引、存储过程、触发器、约束 * 物理数据库 数据存储单位:页(数据存储最基本的单位) 区(管理空间的基本单位) 数据库文件:主数据文件 辅助数据文件 日志文件 文件组:主文件组 用户定义文件组 * 系统数据库和用户数据库 * 创建方式 (1)界面方式创建,修改,删除数据库(不赘述) (2)T_SQL 命令方式创建数据库(CREATE DATABASE) /ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/29ddac46- 7a0f4151-bd94-75c1908c89f8.htm CREATE DATABASE database_name ON PRIMARY ,.n , ,.n LOG ON ,.n COLLATE collation_name WITH ; T_SQL 命令方式修改数据库(ALTER DATABASE) /ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/1f635762- f7aa-4241-9b7a-b51b22292b07.htm ALTER DATABASE database_name | ; := ADD FILE ,.n TO FILEGROUP filegroup_name | ADD LOG FILE ,.n | REMOVE FILE logical_file_name | MODIFY FILE := ( NAME = logical_file_name , NEWNAME = new_logical_name , FILENAME = os_file_name | filestream_path , SIZE = size KB | MB | GB | TB , MAXSIZE = max_size KB | MB | GB | TB | UNLIMITED , FILEGROWTH = growth_increment KB | MB | GB | TB| % , OFFLINE ) T_SQL 命令方式删除数据库(DROP DATABASE) /ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/477396a9- 92dc-43c9-9b97-42c8728ede8e.htm DROP DATABASE database_name | database_snapshot_name ,.n ; 第三章 表与表数据操作 * 相关概念:表结构,记录,字段,空值,关键字 * 数据类型:在 SQL Server 中,每个列、局部变量、表达式和参数 都具有一个相关的数据类型。 数据类型是一种属性,用于 指定对象可保存的数据的类型:整数数据、字符数据、货 币数据、日期和时间数据、二进制字符串等( ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh- CHS/s10de_6tsql/html/a54f7373-b247-4d61- 8fb87f2ec7a8d0a4.html) * 创建表(T_SQL 命令)(CREATE TABLE) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/1e068443- b9ea-486a-804f-ce7b6e048e8b.htm CREATE TABLE database_name . schema_name . | schema_name . table_name ( | | ,.n ) ON partition_scheme_name ( partition_column_name ) | filegroup | “default“ TEXTIMAGE_ON filegroup | “default“ FILESTREAM_ON partition_scheme_name | filegroup | “default“ WITH ( ,.n ) ; :=column_name FILESTREAM COLLATE collation_name NULL | NOT NULL CONSTRAINT constraint_name DEFAULT constant_expression | IDENTITY ( seed ,increment ) NOT FOR REPLICATION ROWGUIDCOL .n SPARSE := type_schema_name . type_name ( precision , scale | max | CONTENT | DOCUMENT xml_schema_collection ) := CONSTRAINT constraint_name PRIMARY KEY | UNIQUE CLUSTERED | NONCLUSTERED WITH FILLFACTOR = fillfactor | WITH ( , .n ) ON partition_scheme_name ( partition_column_name ) | filegroup | “default“ | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT NOT FOR REPLICATION | CHECK NOT FOR REPLICATION ( logical_expression ) *修改表(ALTER TABLE) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/f1745145- 182d-4301-a334-18f799d361d1.htm ALTER TABLE database_name . schema_name . | schema_name . table_name ALTER COLUMN column_name type_schema_name. type_name ( precision , scale | max | xml_schema_collection ) COLLATE collation_name NULL | NOT NULL | ADD | DROP ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE | WITH CHECK | NOCHECK | ADD | | | ,.n * 删除表(DROP TABLE) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/0b6f2b6f- 3aa3-4767-943f-43df3c3c5cfd.htm DROP TABLE database_name . schema_name . | schema_name . table_name ,.n ; * 创建分区表(CREATE PARTITION FUNCTION) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/9dfe8b76- 721e-42fd-81ae-14e22258c4f2.htm CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type ) AS RANGE LEFT | RIGHT FOR VALUES ( boundary_value ,.n ) ; * 创建分区方案(CREATE PARTITION SCHEME) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/5b21c53a- b4f4-4988-89a2-801f512126e4.htm CREATE PARTITION SCHEME partition_scheme_name AS PARTITION partition_function_name ALL TO ( file_group_name | PRIMARY ,.n ) ; * 插入记录(INSERT ) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/1054c76e- 0fd5-4131-8c07-a6c5d024af50.htm WITH ,.n INSERT TOP ( expression ) PERCENT INTO | rowset_function_limited WITH ( .n ) ( column_list ) VALUES ( ( DEFAULT | NULL | expression ,.n ) ,.n ) | derived_table | execute_statement | | DEFAULT VALUES ; := server_name . database_name . schema_name . | database_name . schema_name . | schema_name . table_or_view_name := SELECT FROM ( ) AS table_alias ( column_alias ,.n ) WHERE OPTION ( ,.n ) * 删除记录(DELETE) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/ed6b2105- 0f35-408f-ba51-e36ade7ad5b2.htm WITH ,.n DELETE TOP ( expression ) PERCENT FROM | rowset_function_limited WITH ( .n ) FROM ,.n WHERE | CURRENT OF GLOBAL cursor_name | cursor_variable_name OPTION ( ,.n ) ; := server_name.database_name.schema_name. | database_name. schema_name . | schema_name. table_or_view_name * 修改记录(UPDATE ) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/40e63302- 0c68-4593-af3e-6d190181fee7.htm WITH .n UPDATE TOP ( expression ) PERCENT | rowset_function_limited WITH ( .n ) * 更新记录(MERGE ) ms-help:/MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/c17996d6- 56a6-482f-80d8-086a3423eecc.htm MERGE TOP ( expression ) PERCENT INTO target_table WITH ( ) AS table_alias USING ON WHEN MATCHED AND THEN WHEN NOT MATCHED BY TARGET AND THEN WHEN NOT MATCHED BY SOURCE AND THEN OPTION ( ,.n ) ; := 第 4 章 数据库查询与视图 数据库的查询//xywhere/article/details/7231337 语句格式: 1. Select All | Distinct , . 2. From , 3. Where 4. Group By Having 5. Order By Asc | Desc . 查询顺序为 Select、From、Where、Group By、Having 和 Order By Select 子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。 From 子句对应的是关系代数中的笛卡尔积,列出的是表达式求值过程中需扫描的 关系。 Where 子句对应的是选择谓词。 1、简单查询-查询学号为 1 的学生学号和姓名。 1. Select sno, sname 2. From student 3. Where sno = 1 2、连接查询-查询选修了课程号为C1 的学生学号和姓名。 1. Select sno, sname 2. From student, sc 3. Where student.sno = sc.sno and o = C1 3、上述问题也可以用子查询来实现 1. Select sno, sname 2. From student 3. Where sno in (Select sno From sc where cno = C1) 4、聚集函数 求最高成绩 1. Select MAX(score ) From sc 5、分组查询 在 Where 子句后面加上 Group By 子句可以对元组进行分组,保留字 Group By 后 面跟着一个分组属性列表。最简单情况是 From 子句后面只有一个关系,根据分组 属性对它的元组进行分组。Select 子句中使用的聚集操作符仅用在每个分组上。 例如 查询每个学生的平均成绩 1. Select sno, AVG(grade) 2. From sc 3. Group By sno 该语句是将 sc 关系的元组重新组织,并进行分组使得不同学号的元组分别被组织 在一起,求出各个学生的平均成绩 假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,可以在 Group By 子句后面跟一个 Having 子句即可 注意:当元组含有空值时,应该记住以下两点。 (1)、空值在任何聚集操作中被忽视。它对求和、求平均值和计数都没有影响。 只有 Count(*) 计算空值它表示所有元组数目。但 Count(a) 却是 a 属性非空元组 个数。 (2)、NULL 值又可以在分组属性中看作一般值。例如 Select a, AVG(b) From r 中,当 a 的属性值为空时,就会统计 A=null 的所有元组中 B 的均值。 6、更名运算:SQL 提供可为关系和属重新命名的机制,这是通过 as 子句实现的。 1. old-name as new-name As 子句即可出现在 Select 子句,也可以出现在 From 子句中,例如 函数名 函数功能 COUNT( DISTINCT | ALL *) 统计元组个数 COUNT( DISTINCT | ALL ) 统计一列中值的个 数 SUM( DISTINCT | ALL ) 计算一列值的和 AVG( DISTINCT | ALL ) 计算一列平均值 MAX( DISTINCT | ALL ) 求一列值的最大值 MIN( DISTINCT | ALL ) 求一列值的最小值 1. Select sno as 学号 From student 7、字符串操作 % 能匹配任意字符串 _ 匹配任意一个字符,大小写敏感。例如查找姓李学生的学 号。 1. Select * 视图//xywhere/article/details/7231337 视图创建与删除 试图是从一个或者多个基本表或试图中导出的表,其结构和数据是建立在 对表查 询基础上的。从本质上讲视图不是真实存在的表,是一个虚拟表。 视图的优点和作用: 1、可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求 2、使用视图可以屏蔽数据的复杂性,用户不必了解数据库结构,就可以方便地使 用和管理数据。 3、视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务、 4、视图大大简化了用户对数据的操作 5、视图可以让不同用户以不同的方式看到不同或者相同的数据集 6、视图提供了一个简单而有效的安全机制。 视图创建: 1. Create View (列表名) As Select 查询子句 With Check Option with check option 表示对视图 更新、插入、删除操作时候保证满足视图定义中 的条件(查询子句中的条件表达式)。 例如: 1. Create View s 2. as 3. Select sno, sname 4. From student 5. Where sno = 1 6. With Check Option 视图删除: 1. Drop View 视图名 1. Drop View s * 游标 /344071.html 游标种类 三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标。 游标操作:声明游标、打开游标、提取数据、关闭游标。 同其它变量一样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标 变量的命名规范建议也同其它变量一样。 -声明游标 declare my_cursor cursor keyset for select * from info -删除游标资源 deallocate my_cursor -打开游标,在游标关闭或删除前都有效 open my_cursor -关闭游标 close my_cursor -声明局部变量 declare id int,name varchar(20),address varchar(20) -定位到指定位置的记录 fetch absolute 56488 from my_cursor into id,name,address select id as id,name as name,address as address -定位到当前记录相对位置记录 fetch relative -88 from my_cursor into id,name,address select id as id,name as name,address as address -定位到当前记录前一条 fetch prior from my_cursor into id,name,address select id as id,name as name,address as address -定位到当前记录后一条 fetch next from my_cursor into id,name,address select id as id,name as name,address as address -定位到首记录 fetch first from my_cursor into id,name,address select id as id,name as name,address as address -定位到尾记录 fetch last from my_cursor into id,name,address select id as id,name as name,address as address 第 5 章 T_SQL 语言 /view/14339ec2d5bbfd0a795673f3.html 一:简单的语法知识 1:定义变量给变量赋值 2:if 和 else 3:begin 和 end 4:两种 case 语句 5:循环 /liulun/articles/1359567.html 二:简单的增 删 改 查和一些相关子句 1:update 2:insert 3:select 4:delete 5:where 子句 6:order by 子句 7:distinct 关键字 8:group by 聚集函数 和 having 子句 /liulun/articles/1343417.html 三:复杂一点的查询 1:inner join 2:outer join 3:full join cross join 4:union 5:子查询返回单个值 6:子查询返回多个值 7:any some 和 all 8:外部查询和内部查询 9:派生表 /liulun/articles/1346166.html 四:约束 1:类型 2:命名 3:主键约束 4:外键约束 5:unique 约束 6:check 约束 7:default 约束 8:禁用约束 9:规则 10:默认值 /liulun/articles/1343466.html 五:create drop alter 1:create 2:drop 3:alter /liulun/articles/1343451.html 六:视图 1:创建视图 2:删除和修改视图 3:视图加密 /liulun/articles/1373449.html 七:存储过程与用户自定义函数 1:存储过程的简单创建修改与删除 2:存储过程的输入参数和输出参数 3:用户定义函数 /liulun/articles/1362542.html 八:触发器 1:什么是触发器 2:一个简单的触发器 3:针对触发器的相关操作 4:使用触发器记录操作情况 5:视图上的触发器 6:触发器相关函数 /liulun/articles/1372964.html 九:全文索引 1:简要介绍全文索引 2:全文索引的相关操作 3:全文目录的相关操作 4:全文查询语法 5:综合实例 /liulun/articles/1368655.html 十:游标 1:什么是游标 2:创建一个简单的游标 3:游标的作用域 4:游标的滚动 5:静态游标 6:键驱动的游标 7:动态游标 /liulun/articles/1373352.html 第六章 索引与数据库完整性 * 索引 //xywhere/article/details/7231337 索引的建立与删除 数据库中索引和书籍中索引类似,利用索引可以很快查找所需信息,无须阅读整本 书。在数据库中索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需 数据。而数据库中的索引是某个表中一列或者若干列值的集合。 索引作用: 1、通过创建唯一索引,可以保证数据记录的唯一性。 2、可以大大加快数据检索速度。 3、可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特殊的意 义。 4、在使用 Order By 和 Group By 子句进行检索数据时,可以显著减少查询中分组 和排序时间。 5、使用索引可以在检索数据过程中使用优化隐藏起,提高系统性能。 索引分为聚集索引和非聚集索引,聚集索引是指索引表中索引顺序与表中记录的物 理顺序一致的索引。 建立索引: Create Unique Cluster Index On ( , .) 参数说明如下: 次序:可选 Asc 或 Dsc 默认值为 Asc Unique:表明此索引的每一个索引值只对应唯一的数据记录。 Cluster:表明要建立的索引是聚簇索引,索引项顺序是与表中记录物理顺序一致。 例如 1. Create Unique Index s-no On s(sno) 2. Create Unique Index c-no On c(cno Desc) 删除索引: 1. Drop Index 例如: Drop Index s-no * 数据库完整性 /lenotang/article/details/3304387 数据完整性=可靠性+准确性,这里我们要清楚以下几点: 数据存放在表中 “数据完整性的问题大多是由于设计引起的” 创建表的时候,就应当保证以后数据输入是正确的 错误的数据、不符合要求的数据不允许输入 本质而言,保证数据的完整性 = 实施完整性约束 完整性包括 1. 实体完整性 a) 数据行不能存在重复 2. 域完整性 a) 实现了对输入到特定列的数值的限制 3. 引用完整性 a) 要求子表中的相关项必须在主表中存在 b) 如果建立了主表和子表的关系,则: i. 子表中的相关项目 的数据,在主表中必须存在; ii. 主表中相关项的数据 更改了,则子表对应的数据项也应当随之 iii. 更改; iv. 在删除子表之前,不能 够删除主表; 4. 自定义完整性 实际上,SQL Server 创建表的过程是规定数据列的属性的过程,同时也是 实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程。 创建表包括选择字段名称、数据类型、定义是否为空、设置默认值、主键和外 键关系、检查约束等。表中没有合适的列作为主键,可以创建标识列。 SQL Server 中存在五种约束: 约束的目的:确保表中数据的完整型 常用的约束类型: 主键约束(Primary Key Constraint):要求主键列数 据唯一,并且不允许为空 唯一约束(Unique Constraint):要求该列唯一,允许 为空,但只能出现一个空值。 检查约束(Check Constraint):某列取值范围限制、 格式限制等,如有关年龄的约束 默认约束(Default Constraint):某列的默认值,如 我们的男性学员较多,性别默认为“男” 外键约束(Foreign Key Constraint):用于两表间建 立关系,需要指定引用主表的那列 添加约束的语法: ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 具体的约束说明 约束名的取名规则推荐采用:约束类型_约束字段 主键(Primary Key)约束:如 PK_stuNo 唯一(Unique Key)约束:如 UQ_stuID 默认(Default Key)约束:如 DF_stuAddress 检查(Check Key)约束:如 CK_stuAge 外键(Foreign Key)约束:如 FK_stuNo 下面我们来给前面建立的学员信息表 stuInfo 添加约束: /*添加主键约束(stuNo 作为主键)*/ ALTER TABLE stuInfo ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo) /*添加唯一约束(因为每人的身份证号全国唯一)*/ ALTER TABLE stuInfo ADD CONSTRAINT UQ_stuID UNIQUE (stuID) /*添加默认约束(如果地址不填,默认为“地址不详”)*/ ALTER TABLE stuInfo ADD CONSTRAINT DF_stuAddress DEFAULT (地址不详) FOR stuAddress /*添加检查 check 约束,要求年龄只能在 1540 岁之间*/ ALTER TABLE stuInfo ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40) /*添加外键约束(主表 stuInfo 和从表 stuMarks 建立关系,关联字段为 stuNo) */ ALTER TABLE stuMarks ADD CONSTRAINT FK_stuNo FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo) GO 如果错误地添加了约束,我们还可以删除约束 删除约束的语法 ALTER TABLE 表名 DROP CONSTRAINT 约束名 例如:删除 stuInfo 表中地址默认约束 ALTER TABLE stuInfo DROP CONSTRAINT DF_stuAddress 第七章 存储过程和触发器 * 存储过程 /liulun/articles/1362542.html 一:存储过程的简单创建,修改与删除 1.创建简单的存储过程 use AdventureWorks go create proc spEmployee as select * from HumanResources.Employee 执行上面的代码就创建了一个存储过程 如果想运行这个存储过程 可以直接执行 exec spEmployee 这个语句 2.更改存储过程 ALTER proc dbo.spEmployee as select top 13 * from HumanResources.Employee 3.删除存储过程 drop proc dbo.spEmployee 二:存储过程的输入参数和输出参数 1.有输入参数的存储过程 use AdventureWorks go create proc spEmployee LastName nvarchar(50) = null as if LastName is null select top 13 * from HumanResources.Employee else select top 10 * from HumanResources.Employee 查看该存储过程的结果可以用 exec spEmployee 123 或直接 exec spEmployee 存储过程的重载. 2.有输出参数的存储过程 use AdventureWorks go alter proc spEmployee LastName nvarchar(50) = null output as if LastName is null begin print null return 123 end else begin print LastName return 456 end 看第一个测试该存储过程的语句 declare myval nvarchar(50) exec myval = spEmployee myval output print myval 输出 null 123 第二个测试该存储过程的语句 declare myval nvarchar(50) set myval = xland exec myval = spEmployee myval output print myval 输出 xland 456 * 触发器 /liulun/articles/1372964.html 一:什么是触发器 触发器是一种响应特定事件的特殊类型的存储过程 insert update. drop alter.等事件都有相应的触发器 二:简单的触发器 下面一个例子是在插入或者修改记录的时候的一个触发器 其中 inserted 表是一个临时表 存储的是将要插入的信息 这个触发器的目的是检查将要插入的信息是否符合规定 (在 product 表里没有特殊的记录) 这个例子是 check 约束所不能解决的了的 use AdventureWorks go create trigger orderDetailNotDiscontinued on Sales.SalesOrderDetail after insert, update as if exists ( select true from Inserted i join Production.Product p on i.ProductID = p.ProductID where p.DiscontinuedDate is not null ) begin print(error appear.) rollback tran end 为了验证这个触发器 先给表加入一条不符合条件的记录 use AdventureWorks go update Production.Product set DiscontinuedDate = getdate() where ProductID = 680 好了现在来一条插入语句看看 use AdventureWorks go insert Sales.SalesOrderDetail (SalesOrderID,OrderQty,ProductID,SpecialOfferID,UnitPrice,UnitPriceDisco unt) values (43660,5,680,1,1431,0) 得到的消息是: error appear. 消息 3609,级别 16,状态 1,第 1 行 事务在触发器中结束。批处理已中止。 三:针对触发器的操作 1.禁用触发器 use AdventureWorks go alter table Sales.SalesOrderDetail disable trigger all -这里的 all 可以是具体的触发器名 2.删除触发器 use AdventureWorks go drop trigger orderDetailNotDiscontinued 3.修改触发器 use xland go alter trigger tr_title on mytable for insert, update as if update(title) begin print(title1) end (这里的 update()函数不懂没关系,下面会说到) 四:使用触发器记录操作情况 先看代码 use AdventureWorks go create table Production.inventoryAudit ( id int identity primary key, productid int not null references Production.Product(ProductID), netadjustment smallint not null, modifieddate datetime default(current_timestamp) ) go create trigger ProductAudit on Production.ProductInventory for insert,update,delete as insert into Production.inventoryAudit (productid,netadjustment) select coalesce -coalesce 哪个不为空用哪个 (i.ProductID,d.ProductID), isnull(i.Quantity,0) - isnull(d.Quantity,0) as netadjustmenu from Inserted i full join Deleted d on i.ProductID = d.ProductID and i.LocationID = d.LocationID where isnull(i.Quantity,0) - isnull(d.Quantity,0) !=0 -isnull(i.Quantity,0)如果 i.Quantity 为空返回 0(这个函数比较有用) 注意这里用了 full join 其实如果不是高并发 inserted 和 deleted 中有一个表是不存在的 下面来测试一下这个触发器 use AdventureWorks go update Production.ProductInventory set Quantity = Quantity +7 where ProductID = 1 and LocationID = 50 select * from Production.inventoryAudit 来看看消息: (1 行受影响) 这是修改的一行 (1 行受影响) 这是触发器执行的一行 (1 行受影响) 这是 select 的一行 五:视图上的触发器 instead of 触发器 先创建一个视图 use xland go create view UserArticle_vw with Schemabinding as select a.id,a.title,u.username from dbo.mytable a -必须有架构名,可以用 as join dbo.user u on u.id = a.uid 检查该视图 use xland go select * from UserArticle_vw where id = 2 创建一个视图上的触发器 use xland go create trigger TRMytableInsert on UserArticle_vw instead of insert as begin if (select count(*) from inserted) 0 begin insert into mytable select i.title,u.id from inserted i join user u on u.username = i.username if rowcount = 0 -返回受影响的行数 print(error appear) end end 对这个视图执行插入操作!(有了上面的触发器就可以插入了) use xland go insert into UserArticle_vw (title,username) values (zhe shi title,xla nd) 看下消息 (1 行受影响) (1 行受影响) 类似的还有 insted of update 触发器 insted of delete 触发器 六:触发器的相关函数 看这个触发器 use xland go alter trigger tr_title on mytable for insert, update as if update(title) begin print(title1) end update()函数意思是 指定的列被更改时发生 看下验证语句 use xland go update mytable set title = xland where id = 7 结果 title1 (1 行受影响) 还有一个函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年无人机应用技术考试测试题库含答案详解(突破训练)
- 2025年老年人行为测试题及答案
- 安徽省合肥市瑶海区2024-2025学年高三上学期期中考试化学考试题目及答案
- 安徽省安庆市望江县2023-2024学年高一上学期期末考试历史试题含参考答案
- 2025 年小升初武汉市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 2025 年小升初哈尔滨市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 南平一中2025年实验班自主招生物理试题(解析版)
- 上海市曹杨二中2025-2026学年上学期高三 周测数学试题
- 上海市华东理工附属中学2024-2025学年七年级上学期数学第三次月考试卷(含部分答案)
- 福建省福州市立志中学2024-2025学年八年级上学期期末考试数学试题(含部分答案)
- 期货实物交割管理制度
- 配送企业配送协议书
- T/CHES 43-2020水利水电工程白蚁实时自动化监测预警系统技术规范
- 人工智能及机器人课件
- 2024年注会考试《税法》真题及答案
- 2025年公共行政管理理论知识考试卷及答案
- 2025年地址标签纸项目市场调查研究报告
- 智能计算系统概述
- 谷子介绍课件
- 医工结合的复合型人才培养探索
- 《绿色经济》课件
评论
0/150
提交评论