xml地图|网站地图|网站标签 [设为首页] [加入收藏]
InnoDB意向锁和插入意向锁,触发器详解
分类:数据库

SQL Server:触发器详解

摘要: 下文收集了sqlserver函数教程,为每一个函数都进行了相关举例说明,

 

 

如下所示:

Preface

  • 1. 概述
  • 2. 触发器的分类
  • 3. Inserted和Deleted表
  • 4. 触发器的执行过程
  • 5. 创建触发器
  • 6. 修改触发器:
  • 7. 删除触发器:
  • 8. 查看数据库中已有触发器:
  • 9. “Instead of”相关示例:
  • 10. “After”触发器
  • 11. 参考资源

sqlserver聚合函数教程:
mssql sqlserver avg聚合函数使用简介
mssql sqlserver CHECKSUM_AGG聚合函数使用简介
mssql sqlserver count聚合函数使用简介
mssql sqlserver count_big聚合函数使用简介
mssql sqlserver grouping聚合函数使用简介
mssql sqlserver grouping_id聚合函数使用简介
mssql sqlserver max及min聚合函数使用简介
mssql sqlserver stdev及stdevp聚合函数使用简介
mssql sqlserver sum聚合函数使用简介
mssql sqlserver var及varp聚合函数使用简介
sqlserver分析函数教程:
mssql sqlserver CUME_DIST分析函数使用简介
mssql sqlserver CUME_DIST分析函数原理说明
mssql sqlserver FIRST_VALUE LAST_VALUE分析函数使用简介
mssql sqlserver LAG lead分析函数使用简介
mssql sqlserver PERCENTILE_CONT分析函数使用简介
mssql sqlserver PERCENTILE_DISC分析函数使用简介
mssql sqlserver PERCENT_RANK分析函数使用简介
sqlserver系统全局变量教程:
mssql sqlserver @@DBTS全局变量简介
mssql sqlserver @@LANGID全局变量简介
mssql sqlserver @@LOCK_TIMEOUT全局变量简介
mssql sqlserver @@MAX_CONNECTIONS全局变量简介
mssql sqlserver @@MAX_PRECISION全局变量简介
mssql sqlserver @@NESTLEVEL全局变量简介
mssql sqlserver @@REMSERVER全局变量简介
mssql sqlserver @@SERVERNAME全局变量简介
mssql sqlserver @@SERVICENAME全局变量简介
mssql sqlserver @@SPID全局变量简介
mssql sqlserver @@VERSION全局变量简介
sqlserver数值类型转换函数教程:
mssql sqlserver cast数值转换函数用法简介
mssql sqlserver cast及convert数值转换函数用法简介
mssql sqlserver parse数值转换函数用法简介
mssql sqlserver TRY_CAST数值转换函数用法简介
mssql sqlserver TRY_CONVERT数值转换函数用法简介
mssql sqlserver TRY_PARSE数值转换函数用法简介
sqlserver循环相关类函数教程:
mssql sqlserver @@CURSOR_ROWS循环相关类函数用法简介
mssql sqlserver @@FETCH_STATUS循环相关类函数用法简介
mssql sqlserver CURSOR_STATUS循环相关类函数用法简介
mssql sqlserver_sql流程控制语句while循环关键字用法简介
mssql sqlserver 模拟for循环的写法
mssql sqlserver 遍历循环的新方法
sqlserver数据类型相关函数教程:
mssql sqlserver DATALENGTH数据类型相关函数用法简介
mssql sqlserver IDENT_CURRENT数据类型相关函数用法简介
mssql sqlserver IDENT_INCR数据类型相关函数用法简介
mssql sqlserver IDENT_SEED数据类型相关函数用法简介
mssql sqlserver IDENTITY数据类型相关函数用法简介
mssql sqlserver SQL_VARIANT_PROPERTY数据类型相关函数用法简介
sqlserver 时间及日期相关函数教程:
mssql sqlserver @@DATEFIRST时间及日期相关函数用法简介
mssql sqlserver CURRENT_TIMESTAMP时间及日期相关函数用法简介
mssql sqlserver DATEADD时间及日期相关函数用法简介
mssql sqlserver DATEDIFF时间及日期相关函数用法简介
mssql sqlserver DATEDIFF_BIG时间及日期相关函数用法简介
mssql sqlserver DATEFROMPARTS时间及日期相关函数用法简介
mssql sqlserver DATENAME时间及日期相关函数用法简介
mssql sqlserver DATEPART时间及日期相关函数用法简介
mssql sqlserver DATETIME2FROMPARTS时间及日期相关函数用法简介
mssql sqlserver DATETIMEFROMPARTS时间及日期相关函数用法简介
mssql sqlserver DATETIMEOFFSETFROMPARTS时间及日期相关函数用法简介
mssql sqlserver DAY时间及日期相关函数用法简介
mssql sqlserver EOMONTH时间及日期相关函数用法简介
mssql sqlserver GETDATE时间及日期相关函数用法简介
mssql sqlserver GETUTCDATE时间及日期相关函数用法简介
mssql sqlserver ISDATE时间及日期相关函数用法简介
mssql sqlserver MONTH时间及日期相关函数用法简介
mssql sqlserver SMALLDATETIMEFROMPARTS时间及日期相关函数用法简介
mssql sqlserver SWITCHOFFSET时间及日期相关函数用法简介
mssql sqlserver SYSDATETIME时间及日期相关函数用法简介
mssql sqlserver SYSDATETIMEOFFSET时间及日期相关函数用法简介
mssql sqlserver SYSUTCDATETIME时间及日期相关函数用法简介
mssql sqlserver TIMEFROMPARTS时间及日期相关函数用法简介
mssql sqlserver TODATETIMEOFFSET时间及日期相关函数用法简介
mssql sqlserver YEAR时间及日期相关函数用法简介
mssql sql server 常用日期转换方法分享 (convert datetime)
sqlserver JSON相关函数教程:
mssql sqlserver ISJSON相关函数用法简介
sqlserver 数学函数教程:
mssql sqlserver ABS数学函数用法简介
mssql sqlserver ACOS数学函数用法简介
mssql sqlserver ASIN数学函数用法简介
mssql sqlserver ATAN数学函数用法简介
mssql sqlserver ATN2数学函数用法简介
mssql sqlserver CEILING数学函数用法简介
mssql sqlserver COS数学函数用法简介
mssql sqlserver COT数学函数用法简介
mssql sqlserver DEGREES数学函数用法简介
mssql sqlserver EXP数学函数用法简介
mssql sqlserver FLOOR数学函数用法简介
mssql sqlserver LOG数学函数用法简介
mssql sqlserver LOG10数学函数用法简介
mssql sqlserver PI数学函数用法简介
mssql sqlserver POWER数学函数用法简介
mssql sqlserver RADIANS数学函数用法简介
mssql sqlserver RAND数学函数用法简介
mssql sqlserver ROUND数学函数用法简介
mssql sqlserver SIGN数学函数用法简介
mssql sqlserver SIN数学函数用法简介
mssql sqlserver SQRT数学函数用法简介
mssql sqlserver SQUARE数学函数用法简介
mssql sqlserver TAN数学函数用法简介
sqlserver 逻辑函数教程:
mssql sqlserver CHOOSE逻辑函数用法简介
mssql sqlserver IIF逻辑函数用法简介
sqlserver 元数据教程:
mssql sqlserver @@PROCID元数据用法简介
mssql sqlserver APP_NAME元数据用法简介
mssql sqlserver ASSEMBLYPROPERTY元数据用法简介
mssql sqlserver COL_LENGTH COL_NAME COLUMNPROPERTY元数据用法简介
mssql sqlserver DATABASE_PRINCIPAL_ID元数据用法简介
mssql sqlserver DATABASEPROPERTYEX元数据用法简介
mssql sqlserver DB_ID DB_NAME元数据用法简介
mssql sqlserver FILE_ID元数据用法简介
mssql sqlserver FILE_IDEX元数据用法简介
mssql sqlserver FILE_NAME元数据用法简介
mssql sqlserver FILEGROUP_ID元数据用法简介
mssql sqlserver FILEGROUP_NAME元数据用法简介
mssql sqlserver FILEGROUPPROPERTY元数据用法简介
mssql sqlserver FILEPROPERTY元数据用法简介
mssql sqlserver FULLTEXTCATALOGPROPERTY元数据用法简介
mssql sqlserver FULLTEXTSERVICEPROPERTY元数据用法简介
mssql sqlserver INDEX_COL元数据用法简介
mssql sqlserver INDEXKEY_PROPERTY元数据用法简介
mssql sqlserver INDEXPROPERTY元数据用法简介
mssql sqlserver OBJECT_DEFINITION元数据用法简介
mssql sqlserver OBJECT_ID元数据用法简介
mssql sqlserver OBJECT_NAME元数据用法简介
mssql sqlserver OBJECT_SCHEMA_NAME元数据用法简介
mssql sqlserver ORIGINAL_DB_NAME元数据用法简介
mssql sqlserver PARSENAME元数据用法简介
mssql sqlserver SCHEMA_ID元数据用法简介
mssql sqlserver SCHEMA_NAME元数据用法简介
mssql sqlserver SCOPE_IDENTITY元数据用法简介
mssql sqlserver SERVERPROPERTY元数据用法简介
mssql sqlserver STATS_DATE元数据用法简介
mssql sqlserver TYPE_ID元数据用法简介
mssql sqlserver TYPE_NAME元数据用法简介
mssql sqlserver TYPEPROPERTY元数据用法简介
sqlserver 排名函数教程:
mssql sqlserver 分组排序函数row_number、rank、dense_rank用法简介及说明
row_number() rank() dense_rank() 排名函数的用途及区别
sqlserver 复制函数教程:
mssql sqlserver PUBLISHINGSERVERNAME 关键字功能说明
sqlserver 集合获取函数:
mssql sqlserver OPENDATASOURCE集合获取函数简介
mssql sqlserver OPENJSON集合获取函数简介
mssql sqlserver OPENQUERY集合获取函数简介
mssql sqlserver OPENROWSET集合获取函数简介
mssql sqlserver OPENXML集合获取函数简介
sqlserver字符串函数教程:
mssql sqlserver ASCII字符串函数简介
mssql sqlserver CHAR字符串函数简介
mssql sqlserver CHARINDEX字符串函数简介
mssql sqlserver CONCAT字符串函数简介
mssql sqlserver CONCAT_WS字符串函数简介
mssql sqlserver DIFFERENCE字符串函数简介
mssql sqlserver FORMAT字符串函数简介
mssql sqlserver LEFT字符串函数简介
mssql sqlserver LEN字符串函数简介
mssql sqlserver LOWER字符串函数简介
mssql sqlserver LTRIM字符串函数简介
mssql sqlserver NCHAR字符串函数简介
mssql sqlserver PATINDEX字符串函数简介
mssql sqlserver QUOTENAME字符串函数简介
mssql sqlserver REPLACE字符串函数简介
mssql sqlserver REPLICATE字符串函数简介
mssql sqlserver REVERSE字符串函数简介
mssql sqlserver RIGHT字符串函数简介
mssql sqlserver RTRIM字符串函数简介
mssql sqlserver SOUNDEX字符串函数简介
mssql sqlserver SPACE字符串函数简介
mssql sqlserver STR字符串函数简介
mssql sqlserver错误修复-“string_split无效的对象名称”
mssql sqlserver STUFF字符串函数简介
mssql sqlserver SUBSTRING字符串函数简介
mssql sqlserver UNICODE字符串函数简介
mssql sqlserver UPPER字符串函数简介
sqlserver系统函数教程:
mssql sqlserver $PARTITION系统函数简介
mssql sqlserver @@ERROR系统函数简介
mssql sqlserver @@IDENTITY系统函数简介
mssql sqlserver @@PACK_RECEIVED系统函数简介
mssql sqlserver @@ROWCOUNT系统函数简介
mssql sqlserver @@TRANCOUNT系统函数简介
mssql sqlserver BINARY_CHECKSUM系统函数简介
mssql sqlserver CONNECTIONPROPERTY系统函数简介
mssql sqlserver HOST_ID host_name系统函数简介
mssql sqlserver ISNULL系统函数简介
mssql sqlserver ISNUMERIC系统函数简介
mssql sqlserver NEWID系统函数简介
mssql sqlserver ROWCOUNT_BIG系统函数简介
sqlserver 系统统计函数:
mssql sqlserver @@CONNECTIONS系统统计函数简介
mssql sqlserver @@CPU_BUSY系统统计函数简介
mssql sqlserver @@IDLE系统统计函数简介
mssql sqlserver @@IO_BUSY系统统计函数简介
mssql sqlserver @@PACK_SENT系统统计函数简介
mssql sqlserver @@PACKET_ERRORS系统统计函数简介
mssql sqlserver @@TIMETICKS系统统计函数简介
mssql sqlserver @@TOTAL_ERRORS系统统计函数简介
mssql sqlserver @@TOTAL_READ系统统计函数简介
mssql sqlserver @@TOTAL_WRITE系统统计函数简介

 

    Last night one buddy in tech wechat group asked "what's intention locks of InnoDB?"Thus,I'm gonna say someting about it.As we all know,there're various types of lock in InnoDB engine such as record locks,gap locks,next key locks and so forth.Intention locks is another kind of granularity of lock of InnoDB.

1. 概述

触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。 所以触发器可以用来实现对表实施复杂的完整性约束。

 

2. 触发器的分类

SQL Server2000提供了两种触发器:“Instead of” 和“After” 触发器。

一个表或视图的每一个修改动作(Insert、Update和Delete)都可以有一个“Instead of” 触发器,一个表的每个修改动作都可以有多个“After”触发器。

Introduce

2.1 “Instead of”触发器

  • “Instead of”触发器在执行真正“插入”之前被执行。除表之外,“Instead of” 触发器也可以用于视图,用来扩展视图可以支持的更新操作。
  • “Instead of”触发器会替代所要执行的SQL语句,言下之意就是所要执行SQL并不会“真正执行”

alter trigger trigger_学生_Delete

on 学生

instead of Delete

as

begin

``select 学号, 姓名 ``from deleted

end

 

delete from 学生 ``where 学号 = 4

上例中定义了“trigger学生_Delete”触发器,该触发器从“delete”表中打印出所要删除的学生.在执行“delete”操作后,会发现“学号 = 4”的学生并未被删除, 原因在于“trigger学生Delete”替代了所要执行的“delete from 学生 where 学号 = 4”语句,而在“trigger学生_Delete”中并未真正删除学生。

 

2.2 “After”触发器

  • “After”触发器在Insert、Update或Deleted语句执行之后被触发。“After”触发器只能用于表。
  • “After”触发器主要用于表在修改后(insert、update或delete操作之后),来修改其他表

1. Intention Locks

3. Inserted和Deleted表

SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。

  • 这两个表由系统来维护,它们存在于内存中而不是在数据库中,可以理解为一个虚拟的表。
  • 这两个表的结构总是与被该触发器作用的表的结构相同。
  • 触发器执行完成后,与该触发器相关的这两个表也被删除。
  • Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
  • Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。
对表的操作 Inserted逻辑表 Deleted逻辑表
增加记录(insert) 存放增加的记录
删除记录(delete) 存放被删除的记录
修改记录(update) 存放更新后的记录 存放更新前的记录

 

4. 触发器的执行过程

  • 如果一个Insert﹑update或者delete语句违反了约束,那么这条SQL语句就没有执行成功,因此“After”触发器也不会被激活。

  • “Instead of” 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立,其它任何操作还没有发生时被执行。因为“Instead of” 触发器在约束之前执行,所以它可以对约束进行一些预处理。

    Intention locks of InnoDB are table-level locks.It's generated to indicate which type of lock relevant to a certain row in which the transaction will involve(shared or exclusive lock).It seems like that one guy is booking a ticket of the train to somewhere while the ticket system broadcasts there's a guy mean to ocuppy a seat of certain compartment in the train.But it does not block the action of booking ticket on the same train from another guy at the same time(another intention lock).That is,intention locks does not block each other at all only if you are modify the same row(booking the same seat).It's the effect of exclusive lock instead of intention lock.

5. 创建触发器

create trigger trigger_name

on  {table_name|view_name}

{``After``|``Instead of``} {``insert``|``update``|``delete``}

as 相应T-SQL语句

 

6. 修改触发器:

alter trigger trigger_name

on  {table_name|view_name}

{``After``|``Instead of``} {``insert``|``update``|``delete``}

as 相应T-SQL语句

    There're two kinds of intention locks in InnoDB:

7. 删除触发器:

drop trigger trigger_name

  • Intention shared lock(IS): It indicates that a transaction is setting(or going to set) a shared lock on several rows for shared query operations.
  • Intention exclusive lock(IX): It indicates that a transaction is setting(or going to set) a exclusive lock on several rows for exclusive modification operations.**

8. 查看数据库中已有触发器:

 

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:InnoDB意向锁和插入意向锁,触发器详解

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文