sql触发器

Oracle Trigger触发器

旧城冷巷雨未停 提交于 2019-12-22 01:58:30
一、触发器背景简介 触发器的定义就是说 某个条件成立 的时候,触发器里面所定义的语句就会被自动的执行。 因此触发器不需要人为的去调用,也不能调用。 然后,触发器的触发条件其实在你 定义的时候 就已经设定好了。 这里面需要说明一下,触发器可以分为 语句级触发器 和 行级触发器 。 简单的说就是: 语句级的触发器可以在某些语句执行前或执行后被触发。 而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。 具体举例: 1、 在一个表中定义语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个【删除表的操作】就是触发器执行的条件。 2、 在一个表中定义行级的触发器,那当【这个表中一行数据发生变化】的时候,比如删除了一行记录,那触发器也会被自动执行了。 二、创建触发器 触发器语法: create [or replace] trigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end 其中: 触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert

Mysql的触发器学习总结

旧街凉风 提交于 2019-12-21 01:58:18
一、触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。 触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素: 1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 触发器基本语法如下所示: 其中:trigger_time是触发器的触发事件,可以为before(在检查约束前触发)或after(在检查约束后触发);trigger_event是触发器的触发事件,包括insert、update和delete,需注意对同一个表相同触发时间的相同触发事件,只能定义一个触发器;可以使用old和new来引用触发器中发生变化的记录内容。 触发器SQL语法: [sql] view plain copy create trigger triggerName after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin

PL/SQL程序设计

陌路散爱 提交于 2019-12-20 22:53:51
第一章:PL/SQL概述: 什么是PL/SQL: A。PL/SQL是 Procedure Language & Structured Query Language 的缩写。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的 PL/SQL包括两部分 ,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为: 数据库PL/SQL和工具PL/SQL 。两者的编程非常相似。都具有编程结构、语法和逻辑机制。 B。PL /SQL是一种高级数据库程序设计语言,该语言 专门用于在各种环境下对ORACLE数据库进行访问 。由于该语言集成于数据库服务器中 ,所以PL/SQL代码可以对数据进行快速高效的处理。 PL/SQL的好处: A。有利于客户/服务器环境应用的运行 对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行。自然就 省去了数据在网上的传输时间 。 B。适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL

MSSQL 基础知识001

爷,独闯天下 提交于 2019-12-18 02:45:17
数据库概述: DBMS(Database Management System,数据库管理系统)和数据库。 平时谈到“数据库”可能有两种含义:MSSQLServer、Oracle等某种DBMS;存放一堆数据表的一个分类( Catalog )。 不同品牌的DBMS有自己的不同的特点: MySQL (速度很快,适合对数据要求并不是十分严谨的地方,去掉了很多中小型企业中不常用的功能) MSSQLServer (与.net结合很好,只能运行在windows平台下,大数据量、大交易量表现并不十分好,功能比MySQL多) DB2(大型)、Oracle(大型)、Access(文件)、 SQLite(极其轻量级数据库) 、Sybase等。对于开发人员来讲,大同小异 SQL(语言)<>SQLServer<>MSSQLServer。最常见的错误。 除了Access、SQLServerCE、SQLite等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习、开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。 1:数据库附加时候报错:拒绝访问: 数据库文件权限不够 2:SQL Server数据库身份验证 Windows身份验证 :以当前登录本机的账户去登陆SQL Server,若有权限,则登录;和本机有多少实例账户无关

MySQL 触发器

限于喜欢 提交于 2019-12-11 07:56:10
一、触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。 触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素: 1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 触发器基本语法如下所示: 其中:trigger_time是触发器的触发事件,可以为before(在检查约束前触发)或after(在检查约束后触发);trigger_event是触发器的触发事件,包括insert、update和delete,需注意对同一个表相同触发时间的相同触发事件,只能定义一个触发器;可以使用old和new来引用触发器中发生变化的记录内容。 触发器SQL语法: [sql] view plain copy create trigger triggerName after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin

在论坛中出现的比较难的sql问题:22(触发器专题3)

时间秒杀一切 提交于 2019-12-11 02:54:29
原文: 在论坛中出现的比较难的sql问题:22(触发器专题3) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 本篇 是触发器专题,有很多触发器的问题。 1、sql唯一性约束如何建立? http://bbs.csdn.net/topics/390697861 比如一张表Table1, 三个字段 ID A B ID为主键, 当B字段为某一特定值value时,A字段值是要唯一约束的, 若B字段为其他值,A不加唯一约束的。。 那达不到我要的约束条件了, 我想要的字段是是这样的(k是B的特定值) ID A B 1 a b 2 a b 3 b k 4 c k 如果在此基础上再加 A B b k 或者c k 则不能被允许。 我想在数据库中直接约束,看有没有办法,如果没有,则就要代码约束判断了。 我的方法: --drop table tb--go create table tb(ID int, A varchar(10), B varchar(10)) insert into tbselect 1 ,'a', 'b' union allselect 2 ,'a', 'b' union allselect 3 ,'b', 'k' union

触发器

匆匆过客 提交于 2019-12-06 09:52:50
触发器 概念 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在 check 约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如: update 、 insert 、 delete 这些操作的时候,系统会自动调用执行该表上对应的触发器。 SQL Server 2005 中触发器可以分为两类: DML 触发器和 DDL 触发器,其中 DDL 触发器它们会影响多种数据定义语言语句而激发,这些语句有 create 、 alter 、 drop 语句。 DML 触发器分为: 1 after 触发器(之后触发) A insert 触发器 B update 触发器 C delete 触发器 2 instead of 触发器 (之前触发) 其中 after 触发器要求只有执行某一操作 insert 、 update 、 delete 之后触发器才被触发,且只能定义在表上。而 instead of 触发器表示并不执行其定义的操作( insert 、 update 、 delete )而仅是执行触发器本身。既可以在表上定义 instead of 触发器,也可以在视图上定义。

mysql-常用组件之触发器

六月ゝ 毕业季﹏ 提交于 2019-12-06 06:39:40
基本概念 触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景。 触发器基本操作 1. 创建触发器 DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `dbname`.`trigger` BEFORE/AFTER INSERT/UPDATE/DELETE ON `dbname`.`<Table Name>` FOR EACH ROW BEGIN -- 触发的 sql 动作 END$$ DELIMITER ; 触发时间: before:表中数据发生改变前的状态 after:表中数据发生改变后的状态 PS:如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话) 触发事件: INSERT DELETE UPDATE old/new 关键字 触发器针对的是数据库中的每一行记录,每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中,不同类型的触发事件拥有不同的关键字类型: 触发事件类型 new/old使用 INSERT事件 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后

SQL server触发器学习记录

柔情痞子 提交于 2019-12-04 23:56:46
作为C#程序员,我工作内容基本就是winform,wpf,asp.net。sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫。。。 需求描述:aspnet_Users表有三个触发器INSERT,DELETE,UPDATE,每个触发器的执行结果都是对表: aspnet_UsersAuditing 执行insert操作。结果就是aspnet_UsersAuditing的数据量增长的特别快、导致备份失败。 现在需要更改触发器的条件: The trigger on this table should ignore updates if only LastActivityDate changed. 也就是说,当只有字段:LastActivityDate 发生变化时,不需要执行触发器。 解决过程: 下图是目前的UPDATE触发器sql。根据需求,我认为需要修改的只有UPDATE触发器,因为insert和delete并不会引起only LastActivityDate change。 看了几篇博客,对触发器的语法有了大概的了解。但是对except、deleted、intserted关键字很陌生。 EXCEPT:可以理解为B在A中的补集。或者根据单词直译,从A中减掉B。 (SELECT * FROM A{1,1,2,3}) EXCEPT

MySQL数据库用户和权限管理

蹲街弑〆低调 提交于 2019-12-04 10:42:59
一、视图  视图: VIEW,虚表,保存有实表的查询结果,在视图插入的内容都会存入表中。  创建方法: CREATE VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] 查看视图定义: SHOW CREATE VIEW view_name  删除视图: DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE] 视图中的数据事实上存储于“基表”中,因此,其修改操作也会针对基表实现;其修改操作受基表限制 (1) 创建一个视图: create view v_students as select stuid,name,age from students; 创建一个新的视图,起名为v_students create view v_old_students as select stuid,name,age from students where age > 50; 将视图大于50岁以上的名字进行显示。 inster v_old_students values(27,'li',20);此时可以在视图中添加一个20岁的内容,实际添加到表里边,而视图中不会显示。 二、函数 1、函数