Sql高级知识点
sql列设置默认值,语法查询知识点积累

sql列设置默认值,语法查询知识点积累
⼀、修改字段默认值
alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束
alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称 -------说明:添加⼀个表的字段的约束并指定默认值⼆、修改字段名:
alter table 表名 rename column A to B
三、修改字段类型:
alter table 表名 alter column UnitPrice decimal(18, 4) not null
三、修改增加字段:
alter table 表名 add 字段类型 not null default 0
四、sql查询,设定某个列(多数是新增列)的默认值,
selelct 列,1 as 列1,null as 列2 from table
列1 默认值是1,列2默认值是 null
视图基本操作
1.当表结构有所改变的时候,关于原来的表的视图,就不能继续使⽤了,这个时候需要再次更新视图
EXEC sp_refreshview 'user_View' ---刷新视图---
2.直接查询视图的组成语句
sp_helptext 'user_View'---查看视图--。
SQL必知必会

SQL必知必会SQL必知必会第⼀课:了解SQL1、不同的DBMS中,相同的数据类型拥有不同的名称。
1)表中的数据是按⾏存储的。
row(⾏)表中的⼀个记录。
表中的⾏有多种称呼,有的⽤户称之为数据库记录(record),有的称呼为⾏(row)这个两个专业术语可以交替使⽤,但是从技术上来说,“⾏(row)”才是正常的术语。
主键:primary key,⼀列(或者⼀组列)其值能够唯⼀的标识表中的每⼀⾏。
注意:应该总是定义主键,创建的每个表都应该有⼀个主键,以便于以后数据库的操作和管理。
表中的任何列都可以作为主键,只需要满⾜下列条件。
1)任意两⾏都不具有相同的主键值(唯⼀性)2)每⼀⾏都必须具有⼀个主键值(主键值不允许为null)3)主键列中的值不允许修改或更新4)主键值不能重⽤(如果某⾏从表中删除,它的主键不能赋值给以后的新创建的⾏。
)主键通常定义在表的⼀列上,也可以使⽤多个列作为主键(联合主键),多个列作为主键,上述4个条件必须应⽤到所有的列,所有列值的组合必须唯⼀(满⾜主键的唯⼀性)SQL(structure qurey language)结构话查询语⾔,⽤来与数据库沟通的语⾔。
第⼆课:检索数据注意:SQL不区分⼤⼩写,因此SELECT 和 select是⼀样的。
在处理SQL语句时,所有的空格都会被忽略。
select prod_name from products;select prod_namefrom products;表⽰同样的意思。
说明:许多SQL开发⼈员喜欢对SQL关键字使⽤⼤写,⽽对列名和表名使⽤⼩写,这样做的⽬的是使代码更易于阅读和调式。
SELECT prod_name FROM products;2、检索单个列SELECTprod_nameFROMproducts;⼤多数SQL开发⼈员认为将SQL语句分成多⾏更容易阅读和调式。
3、检索多个列SELECT prod_id,prod_name,prod_price FROM products;注意:多个列查询,SELECT关键字后⾯跟列名,多个列中间使⽤逗号“,”进⾏分隔,最后⼀个需要查询的列不⽤逗号分隔。
15 个常用的 sql server 高级语法

15 个常用的 sql server 高级语法1.子查询:子查询是在主查询中嵌套的查询语句,用于从一个表中获取数据供父查询使用。
子查询可以嵌套多层,可以使用于SELECT、FROM、WHERE、HAVING和INSERT INTO语句中。
2.联合查询:联合查询是用于在一个查询中将多个SELECT语句的结果合并在一起。
它使用UNION或UNION ALL关键字来连接多个SELECT语句,其中UNION ALL不去重复查询结果,而UNION去除重复结果。
3. JOIN:JOIN用于将两个或多个表中的数据关联起来,以便根据这些关联查询数据。
SQL Server中的JOIN有多种类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
4.存储过程:存储过程是一组预定义的SQL语句集合,用于完成特定的任务。
它可以接收输入参数,并返回输出参数,可以由应用程序或触发器调用。
5.触发器:触发器是一种特殊类型的存储过程,它在数据库中的表上定义了一组操作,并在特定的事件(如插入、更新或删除)发生时自动触发这些操作。
6.索引:索引是一种数据结构,用于在数据库中快速查找和访问数据。
通过创建适当的索引,可以大大提高查询的性能。
SQL Server支持聚簇索引、非聚簇索引和唯一索引等不同类型的索引。
7.分区:分区是将大型表或索引拆分成更小、更易管理的部分的技术。
它可以提高查询性能、管理数据和维护索引的效率。
8.窗口函数:窗口函数是一种在查询结果的窗口或分组上执行计算的函数。
它可以在SELECT语句中使用OVER关键字来指定窗口范围,并对窗口内的数据进行计算。
9. CTE:CTE(通用表达式)是一种临时命名的结果集,它在查询中可以像表一样引用。
CTE可以用于递归查询、多个查询之间共享相同的子查询和提高查询可读性。
10. XML查询:SQL Server支持对XML数据进行查询和处理。
它提供了一组特殊的XML查询语句,如XML PATH和FOR XML,用于从XML数据中提取信息。
全国计算机二级sql知识点

全国计算机二级sql知识点
全国计算机二级SQL的知识点包括但不限于:
1. SQL的数据定义语言(DDL),如CREATE、ALTER、DROP等命令,用于定义和管理数据库中的表、视图、索引等对象。
2. SQL的数据操纵语言(DML),如INSERT、UPDATE、DELETE等命令,用于添加、修改、删除数据库中的数据。
3. SQL的数据查询语言(DQL),如SELECT命令,用于查询数据库中的数据,可以进行条件查询、聚合查询、连接查询等操作。
4. SQL的数据控制语言(DCL),如GRANT、REVOKE等命令,用于控制数据库中的数据访问权限。
5. 数据库规范化理论,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,用于规范化数据库表的设计,消除数据冗余和提高数据一致性。
6. 数据库设计的基本概念和方法,如ER图、实体-关系模型等,用于设计数据库结构和数据关系。
7. 数据库的备份与恢复技术,如备份数据库文件、恢复数据库文件等,用于保护数据库的数据安全和完整性。
8. 数据库的性能优化技术,如索引优化、查询优化等,用于提高数据库性能和响应时间。
9. 数据库的安全性管理,如用户账户管理、权限控制等,用于保护数据库的安全和机密信息。
以上是全国计算机二级SQL知识点的一部分,仅供参考。
具体考
试内容和要求可能因地区和考试机构而有所不同,建议查阅相关的考试大纲和教材。
菜鸟教程sql语法

菜鸟教程sql语法标题:深入理解SQL语法:从入门到精通导语:SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言,广泛应用于各行各业的数据存储与查询。
本文将带你深入了解SQL语法,在掌握基本语法的同时,为你提供全面而有指导意义的内容。
让我们开始SQL之旅吧!一、SQL简介及基本语法1. SQL的概念与作用SQL是一门标准化语言,用于管理和操作关系型数据库。
它可以帮助我们存储、查询、更新、删除数据库中的数据,是使得数据库具备强大功能的基石。
2. SQL基本语法SQL语句通常包括以下几个部分:- SELECT:用于查询数据库中的数据。
- INSERT INTO:用于向数据库插入新数据。
- UPDATE:用于更新数据库中的数据。
- DELETE:用于删除数据库中的数据。
- CREATE TABLE:用于创建数据库表。
- ALTER TABLE:用于修改数据库表结构。
- DROP TABLE:用于删除数据库表。
- WHERE语句:用于指定查询或更新条件。
二、SQL数据查询与操作1. 数据查询SQL语句的核心部分是SELECT语句,可以通过以下方式查询数据:- 使用通配符(*)查询所有字段。
- 通过指定字段名查询特定字段。
- 使用WHERE语句添加查询条件。
- 使用ORDER BY语句进行排序。
- 使用LIMIT语句限制查询结果数量。
2. 数据操作- INSERT INTO语句用于向数据库表中插入新数据。
- UPDATE语句用于更新已存在的数据。
- DELETE语句用于删除数据库中的数据。
三、SQL表的创建与修改1. 创建表使用CREATE TABLE语句可以创建数据库中的新表。
需要指定表名及其字段名、字段类型和约束等信息。
2. 修改表结构- 使用ALTER TABLE语句可以对现有表结构进行修改,例如添加字段、修改字段类型或长度等。
- 使用DROP TABLE语句可以删除数据库中的表。
SQL高级语法总结

SQL 约束
• NOT NULL - 指示某列不能存储 NULL 值。 • UNIQUE - 保证某列的每行必须有唯一的值。 • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列
多个列的结合)有唯一标识,有助于更容易更快速地找到表中的 一个特定的记录。 • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完 整性。 • CHECK - 保证列中的值符合指定的条件。 • DEFAULT - 规定没有给列赋值时的默认值。
SQL LEFT JOIN 关键字
SQL RIGHT JOIN 关键字
• RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表 (table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
• SELECT column_name(s) FROM table1 RIGHT JOIN table2 • ON table1.column_name=table2.column_name; • SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 • ON table1.column_name=table2.column_name; • 注释:在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。
SQL RIGHT JOIN 关键字
SQL FULL OUTER JOIN 关键字
• FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其 中一个表中存在匹配,则返回行.
• FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。 • SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 • ON table1.column_name=table2.column_name;
sql语句大全及用法

sql语句大全及用法SQL(Structured Query Language,结构化查询语言)是用于存取和操纵关系式数据库的标准计算机语言,可用于定义、检索以及控制数据库中的数据。
它是由IBM公司的研究员开发出来的,不久后普及全世界,大大提高了操作数据库的效率。
sql通常被分成两种:DDL(数据定义语言,Data Definition Language)和DML(数据库操纵语言,Data Manipulation Language)。
其中DDL用于定义数据库结构和构建表,而DML则用于操纵并操作数据库中的数据。
1. 数据库结构构建(DDL)• 创建表(Create):CREATE TABLE 表名(字段名1 数据类型,字段名2 数据类型,……)• 修改表(Alter):ALTER TABLE 表名 ADD 字段名数据类型;ALTER TABLE 表名DROP 字段名;ALTER TABLE 表名 MODIFY 字段名数据类型• 删除表(Drop):DROP TABLE 表名2. 数据操纵(DML)• 更新数据(Update):UPDATE 表名 SET 字段名= 值 WHERE 条件• 授权(Grant):GRANT 权限 ON 数据库名 TO 用户4. 高级SQL语句• 嵌套查询(Nested query):SELECT * FROM 表名 WHERE 字段名 IN(SELECT * FROM 另一个表名 WHERE 条件)• 分组聚合(Group by):SELECT 字段名 FROM 表名 GROUP BY 字段名• 分页查询(Page query):SELECT * FROM 表名 LIMIT 起始的记录条数,获取的记录数。
SQL定义变量、创建表及重点掌握知识点(一)

SQL定义变量、创建表及重点掌握知识点(一)一、定义变量、赋值1定义一个变量a 设置初始值并输出declare@a intset@a=5print@a–输出5如下图2使用select语句赋值declare@user1nvarchar(50) --变量及类型select@user1='测试注意标点符号'print@user1declare@user2nvarchar(50)select@user2= Name from table_User where ID=1 --把select 查询的结果给user2,当然要先table_User表要先建立好print@user2declare @user1 nvarchar(50)select @user1=(select name from daotestnot where name='hu')print @user13使用update语句赋值declare@user3nvarchar(50)update table_User set@user3= Name where ID=1print@user3二、建表、临时表、表变量1创建临时表1create table #table_User([ID][int]NOT NULL,[Oid][int]NOT NULL,[Login][nvarchar](50) NOT NULL,[Rtx][nvarchar](4) NOT NULL,[Name][nvarchar](5) NOT NULL,[Password][nvarchar](max) NULL,[State][nvarchar](8) NOT NULL);2向临时表1插入一条记录依次填写表中数据insert into #table_User (ID,Oid,[Login],Rtx,Name,[Password],State) values (1,2,'LS','0000','临时','888','状态');--从ST_User查询数据,填充至新生成的临时表select*into #DU_User2 from ST_User where ID<8--查询并联合两临时表select*from #DU_User2 where ID<3union select*from #DU_User1--删除两临时表drop table #DU_User1drop table #DU_User2--创建临时表CREATE TABLE #t([ID][int]NOT NULL,[Oid][int]NOT NULL,[Login][nvarchar](50) NOT NULL,[Rtx][nvarchar](4) NOT NULL,[Name][nvarchar](5) NOT NULL,[Password][nvarchar](max) NULL,[State][nvarchar](8) NOT NULL,)--将查询结果集(多条数据)插入临时表insert into #t select*from ST_User--不能这样插入--select * into #t from dbo.ST_User--添加一列,为int型自增长子段alter table #t add[myid]int NOT NULL IDENTITY(1,1)--添加一列,默认填充全球唯一标识alter table #t add[myid1]uniqueidentifier NOT NULL default(newid())select*from #tdrop table #t--给查询结果集增加自增长列--无主键时:select IDENTITY(int,1,1)as ID, Name,[Login],[Password]into #t from ST_User select*from #t--有主键时:select (select SUM(1) from ST_User where ID<= a.ID) as myID,*from ST_User a order by myID--定义表变量declare@t table(id int not null,msg nvarchar(50) null)insert into@t values(1,'1')insert into@t values(2,'2')select*from@t三、循环--while循环计算1到100的和declare@a intdeclare@sum intset@a=1set@sum=0while@a<=100beginset@sum+=@aset@a+=1endprint@sum四、条件语句--if,else条件分支if(1+1=2)beginprint'对'endelsebeginprint'错'end--when then条件分支declare@today intdeclare@week nvarchar(3)set@today=3set@week=casewhen@today=1then'星期一'when@today=2then'星期二'when@today=3then'星期三'when@today=4then'星期四'when@today=5then'星期五'when@today=6then'星期六'when@today=7then'星期日'else'值错误'endprint@week五、游标declare@ID intdeclare@Oid intdeclare@Login varchar(50)--定义一个游标declare user_cur cursor for select ID,Oid,[Login]from ST_User --打开游标open user_curwhile@@fetch_status=0begin--读取游标fetch next from user_cur into@ID,@Oid,@Loginprint@ID--print @Loginendclose user_cur--摧毁游标deallocate user_cur六、触发器触发器中的临时表:Inserted存放进行insert和update 操作后的数据Deleted存放进行delete 和update操作前的数据--创建触发器Create trigger User_OnUpdateOn ST_Userfor UpdateAsdeclare@msg nvarchar(50)--@msg记录修改情况select@msg= N'姓名从“'+ + N'”修改为“'+ +'”' from Inserted,Deleted--插入日志表insert into[LOG](MSG)values(@msg)--删除触发器drop trigger User_OnUpdate七、存储过程--创建带output参数的存储过程CREATE PROCEDURE PR_Sum@a int,@b int,@sum int outputASBEGINset@sum=@a+@bEND--创建Return返回值存储过程CREATE PROCEDURE PR_Sum2@a int,@b intBEGINReturn@a+@bEND--执行存储过程获取output型返回值declare@mysum intexecute PR_Sum 1,2,@mysum outputprint@mysum--执行存储过程获取Return型返回值declare@mysum2intexecute@mysum2= PR_Sum2 1,2print@mysum2八、自定义函数函数的分类:1)标量值函数2)表值函数a:内联表值函数b:多语句表值函数3)系统函数--新建标量值函数create function FUNC_Sum1(@a int,@b int)returns intasbeginreturn@a+@bend--新建内联表值函数create function FUNC_UserTab_1(@myId int)returns tableasreturn (select*from ST_User where ID<@myId)--新建多语句表值函数create function FUNC_UserTab_2(@myId int)returns@t table([ID][int]NOT NULL,[Oid][int]NOT NULL,[Login][nvarchar](50) NOT NULL,[Rtx][nvarchar](4) NOT NULL,[Name][nvarchar](5) NOT NULL,[Password][nvarchar](max) NULL,[State][nvarchar](8) NOT NULL)asbegininsert into@t select*from ST_User where ID<@myId returnend--调用表值函数select*from dbo.FUNC_UserTab_1(15)--调用标量值函数declare@s intset@s=dbo.FUNC_Sum1(100,50)print@s--删除标量值函数drop function FUNC_Sum1谈谈自定义函数与存储过程的区别:一、自定义函数:1. 可以返回表变量2. 限制颇多,包括不能使用output参数;不能用临时表;函数内部的操作不能影响到外部环境;不能通过select返回结果集;不能update,delete,数据库表;3. 必须return 一个标量值或表变量自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章1.E-R图:巨型表示实体,椭圆形表示属性,菱形表示关系2.范式:第一范式:属性的原子性。
第二范式:属性与主键没有关联。
(可以有间接关联)第三范式:属性与主键只有直接关联。
(不能有间接关联)第二章1.变量1.1.局部变量:用户自定义的变量语法:--声明DECLARE@i INT--赋值SET@i=1SELECT@i=1--使用输出--以表格的方式输出内容SELECT@i--直接输出内容PRINT@i1.2.全局变量:系统定义的变量参考课本P33页的表格2.逻辑控制语句1.IF-ELSE2.WHILE3.CASE语法:CASEWHEN SCORE<60THEN'不及格'WHEN SCORE>=60AND SCORE<80THEN'及格'WHEN SCORE>=80THEN'优秀'END3.批处理语句GO第三章1.子查询:大查询语句里面嵌套了另外一条查询语句。
注意:1.把嵌套在打查询里的子查询当做一张表(列,条件)来使用2.当子查询作为列来使用时,该子查询的结果只能唯一或者(一行多列)。
3.当子查询作为条件来使用时:1如果条件里用(=,<,>等),那么该子查询的结果是唯一(一行一列)的。
2如果条件里用(IN,EXISTS等),那么该子查询的结果可以是多个(多行一列)2.IN和EXISTS1.Eg:SELECT*FROM STUMARKS WHERE MARKNUM IN('1','5','9')2.eg:SELECT*FROM STUINFO WHERE EXISTS(SELECT*FROM STUMARKS WHERE STUID='001')3.SOME,ANY,ALL4.聚合技术:COMPUTE和COMPUTE BY汇总查询5.排序函数--语法:排序函数(ROW_NUMBER(),RANK(),DENSE_RANK())OVER(ORDER BY列名) --ROW_NUMBER()显示行号SELECT ROW_NUMBER()OVER(ORDER BY SCORE DESC)名次,*FROM STUMARKS --RANK():显示名次,如重复会跳空SELECT RANK()OVER(ORDER BY SCORE DESC)名次,*FROM STUMARKS--DENSE_RANK():显示名次,如重复不跳空SELECT DENSE_RANK()OVER(ORDER BY SCORE DESC)名次,*FROM STUMARKS6.公式表表达式:相当创建一张临时表语法:WITH临时表名(列1,列2,列3,…)AS(查询语句)SELECT*FROM临时表名第四章1.索引:数据表中数据和相应存储位置的列表。
(相当于辞典里的目录)1.1聚集索引:(相当于辞典的拼音查字目录)有序,一般默认创建在主键上1.2非聚集索引:(相当于辞典的部首查字目录)无序,手动创建其他列,提高查找效率语法:CREATE INDEX[UNIQUE][CLUSTERED|NONCLUSTERED]索引名ON表名(列名)删除索引:DROP表名.索引名2.视图:虚拟表语法:创建:CREATE VIEW视图名AS查询语句删除:DROP VIEW视图名注意:1如果视图只包含一张表的数据,那么可以做增删改操作2如果视图包含多张表的数据,那么只能做修改操作,不能做添加删除操作3虽然视图有上面的特点,但一般不对他进行修改操作,只作查询用第五章一、事务(Transaction):由N条SQL语句组成,做为单个不可分割的逻辑单元进行操作。
操作时要么所有语句全部执行,要么全部不执行。
事务的四大属性(ACID)(特点):1、原子性:事务是一个完整的操作。
每一个步骤不可分割的。
要么都执行,要么都不执行。
2、一致性:当事务完成后,数据整体保持在一致的状态。
3、隔离性:事务与事务之间是独立的,相互不受影响。
4、永久性:事务完成后,它对数据库的操作将被永久保存。
事务的分类:显式事务、自动提交事务、隐式事务。
显式事务的操作:1、开始(启)事务:begin transaction2、提交事务:commit transaction3、回滚事务:rollback transaction在C#中运用事务1、开始(启)事务:sqlComm.Transaction=sqlConn.BeginTransaction();2、提交事务:mit();3、回滚事务:sqlComm.Transaction.Rollback();2、游标(Cursor):游标是一种从包含N条结果集中一次提取一条记录的机制。
作用:1、从结果集中检索数据2、允许定位(相对,绝对)到结果集中的特定行。
3、允许对结果中游标定位的行进行修改。
(做为条件)分类:T-SQL游标、API游标、客户端游标操作:1、定义游标declare游标名cursor[forward only|scroll]for查询语句解释:forward only:表示游标为只进游标。
(只能向下一条一条的检索)(默认) Scroll:表示滚动游标。
(可以相对,绝对定位)2、打开游标open游标名3、检索游标fetch游标名下一条fetch next from游标名下一条fetch prior from游标名上一条fetch first from游标名第一条fetch last from游标名最后一条fetch absolute N from游标名绝对定位N为正数时:绝对定位到第N行。
N为负数时:绝对定位到倒数第N行。
N为0时:定位到第一行的上面,第0行(空行)fetch relative N from游标名绝对定位N为正数时:相对定位到当前行的后面第N行。
N为负数时:绝对定位到当前行的前面第N行。
N为0时:当前行。
4、关闭游标close游标名5、删除游标deallocate游标名第六章一、存储过程(Procedure):类似于C#中的方法,是一组为了完成特定的任务的SQL语句的集合。
特点:用于管理或处理较复杂的业务逻辑。
可以有参数、返回值、还可以有带返回值的参数,其中可以定义变量,编写流程控制语句。
不能包含Create database语句优点:提高重用性,允许模块化设计,提高执行速度,减少网络流量,提高了安全性。
分类:1、系统存储过程:1)系统定义,存在master中2)通常由sp_或xp_开头。
sp_用来进行系统参数设置xp_用来调用操作系统提供的功能调用系统存储过程:execute存储过程名2、自定义存储过程1)用户自定义,存在当前的数据库中。
2)通常由p_开头。
(名字是自定义的)`创建语法:if exists(select*from sysObjects where name='存储过程名')drop proc存储过程名gocreate procedure存储过程名[参数数据类型[=默认值][output],……..]as//语句块go二、在C#里调用存储过程1.调用存储过程:把原本放sql语句的string换成存储过程名称。
string strSql="proc_transfer";2.设置sql脚本类型:mandType=CommandType.StoredProcedure;3.带参存储过程:(前面两步不变)(1)定义要传入存储过程的参数对象:SqlParameterSqlParameter sqlPara=new SqlParameter("存储过程里的参数名称",数据库里的数据类型);sqlPara2.Value=outID;//把c#中的参数值,放入到参数对象里(2)把前面的参数对象放入到command里面去sqlComm.Parameters.Add(sqlPara);(3)后面步骤不变:让command执行4.带输出参数的存储过程(1)比3(1)多了一句话:设置一个属性,让参数的对象成为输出参数sqlPara.Direction=ParameterDirection.Output;(2)和3(2)相同(3)和3(3)相同(4)得到输出参数:获取输出参数里德值string mess=sqlPara4.Value.ToString();第七章一、触发器(trigger):在特殊情况下自动被调用的存储过程。
对表或视图做增删改操作时,自动执行的一系列SQL语句的集合。
特点:1)是一个特殊的存储过程。
自动调用(无法手动调用)2)是一个特殊的事务。
正确时自动提交,我们控制回滚。
3)是一个高级约束。
类型:1.DML触发器a)After触发器:约束要优先用触发器。
只能定义在表上1、delete触发器工作原理:在做delete操作时被触发,触发后系统会自动生成一张临时表deleted,此表的结构和删除数据原表的结构一样,其中的数据就是将要被删除的数据,操作完成以后,deleted表就不存在了。
2、insert触发器工作原理:在做insert操作时被触发,触发后系统会自动生成一张临时表inserted,此表的结构和插入数据原表的结构一样,其中的数据就是将要被插入的数据,操作完成以后,inserted表就不存在了。
3、update触发器工作原理:在做update操作时被触发,触发后系统会自动生成临时表inserted和deleted表,inserted表中的数据是更新以后的新数据,deleted中的数据是更新以前的原数据。
掌握列级更新。
(看示例)After触发器语法:if exists(select*form sysObjects where name='触发器名')drop trigger触发器名gocreate trigger触发器名on表名for<delete、insert、update>as语句块gob)Instead of触发器:在约束之前被触发。
可以定义在表和视图上Instead of触发器语法:if exists(select*form sysObjects where name='触发器名') drop trigger触发器名gocreate trigger触发器名on表名instead of<delete、insert、update> as语句块go2.DDL触发器。