sql触发器

触发器和存储过程简述

只愿长相守 提交于 2020-01-17 15:32:34
1 什么是触发器? 触发器就是某个表发生一个事件(增删改操作),自动执行预先编译好的sql语句,执行相关操作。触发器事件和sql语句是原子性的,保证了数据的完整性。 2 create trigger 触发器名称 before /after insert/update/delete on 表名 for each row(每行变动都触发) begin Sql语句 end; delimiter ;--此处必须有空格,表示语句的结束 3 new 代表触发器执行添加或者更新时的被操作的记录 4 old 代表触发器执行删除或者更新时的被操作的记录 5 什么是存储过程? 存储过程类似于函数,但是存储过程没有返回值,用call调用存储过程。 6 触发器和存储过程的比较? 触发器是自动调用,存储过程需要手动调用。 触发器适用于简单的sql事件, 存储过程适用于复杂的sql事件,存储过程可以在java中直接调用。 来源: https://www.cnblogs.com/fengfeng21/p/12205688.html

sql之T-SQL

此生再无相见时 提交于 2020-01-16 16:17:38
下面就T-SQL的几个方面来分别讲解一下。 1、变量 要动态的写sql语句,就不能没有变量。 声明变量并赋值: 1 declare @i as int;--定义一个 int 类型的 变量 (as可以省略) 2 print @i;--这注意:没有赋值之前,程序不会报错,而且输出一个 空 3 set @i=3; 4 print @i; 在sql server 2008之后就可以对变量 在声明的同时进行赋值 1 declare @a int=3; 2 print @a; 在变量的使用过程中,一定要注意nvarcahr 和nchar的区别。 1 declare @s nvarchar(20); 2 set @s='Hello'; 3 set @s=@s+' World!'; 4 print @s;--输出的是 Hello World! 5 6 declare @s2 nchar(20); 7 set @s2='Hello'; 8 set @s2=@s2+' World!'; 9 print @s2;--输出的是 Hello。 为什么使用nchar却是输出的 Hello,因为:nchar是固定长度,即使长度没有达到最大,但是其余长度用 空来代替了,所以 相当于是满的,所以在进行字符串的相加 是不会起作用的。 在查询中赋值: 1 declare @now datetime; 2 select

SQL触发器 禁用 启动

心已入冬 提交于 2020-01-11 10:49:55
https://www.cnblogs.com/FlyGoldfish/articles/6398212.html # def starttrigger():# enable 启动 # disable 关闭 conn, cursor=get57sql() starttrigger_sql="alter table [PersonHouseInfo].[dbo].[student2] enable trigger trig_delete" cursor.execute(starttrigger_sql) conn.commit() # 创建触发器 def createtrigger(): conn, cursor = get57sql() createtrigger_sql="Create trigger [dbo].[trig_delete] on [dbo].[student2] after delete as begin select stu_id as 已删除的学生编号,stu_name, stu_gender, stu_age from deleted end;" cursor.execute(createtrigger_sql) conn.commit() # 删除触发器 def droptrigger(): conn, cursor = get57sql()

pl/sql编程/存储过程/存储函数/触发器

回眸只為那壹抹淺笑 提交于 2020-01-08 02:16:36
pl/sql编程语言 pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。 pl/sql编程语言比一般的过程化编程语言,更加灵活高效。 pl/sql编程语言主要用来编写存储过程和存储函数等。 结构: declare --变量声明区域 begin --逻辑操作区域 end ; --可以把整个结构理解为java中的main方法 实例 ---声明方法 ---赋值操作可以使用:=也可以使用into查询语句赋值 declare --变量声明区域 i number ( 2 ) : = 10 ; s varchar2 ( 10 ) : = '小明' ; ena emp . ename % type ; ---引用型变量 emprow emp % rowtype ; ---记录型变量 begin dbms_output . put_line ( i ) ; --类似与控制台输出 dbms_output . put_line ( s ) ; select ename into ena from emp where empno = 7788 ; --将查询到的数据通过into赋值到ena dbms_output . put_line ( ena ) ; select * into emprow from emp where empno = 7788 ; dbms_output

MySQL基础篇(03):系统和自定义函数总结,触发器使用详解

。_饼干妹妹 提交于 2020-01-04 00:39:05
本文源码: GitHub·点这里 || GitEE·点这里 一、系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数、字符串型函数、日期时间函数、聚合函数等。以下列出了这些分类中常用的函数。 1、控制流程函数 case...when 根据值判断返回值,类比编程中的IF-ELSE判断。 -- DEMO 01 SELECT CASE DATE_FORMAT(NOW(),'%Y-%m-%d') WHEN '2019-12-29' THEN 'today' WHEN '2019-12-28' THEN 'yesterday' WHEN '2019-12-30' THEN 'tommor' ELSE 'Unknow' END; -- DEMO 02 SELECT (CASE WHEN 1>0 THEN 'true' ELSE 'false' END) AS result; if(expr1,expr2,expr3) 如果表达式 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。 SELECT IF(1>2,'1>2','1<2') AS result ; SELECT IF(1<2,'yes ','no') AS result ; SELECT IF(STRCMP('test','test'),

MySQL的学习--触发器

家住魔仙堡 提交于 2020-01-01 03:28:28
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。 创建触发器 在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识触发时机,取值为 BEFORE 或 AFTER; trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE; tbl_name:标识建立触发器的表名,即在哪张表上建立触发器; trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。 由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。 另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。 trigger_event 详解 M ySQL 除了对 INSERT、UPDATE

MySQL基础篇(03):系统和自定义函数总结,触发器使用详解

浪尽此生 提交于 2019-12-31 08:06:21
本文源码: GitHub·点这里 || GitEE·点这里 一、系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数、字符串型函数、日期时间函数、聚合函数等。以下列出了这些分类中常用的函数。 1、控制流程函数 case...when 根据值判断返回值,类比编程中的IF-ELSE判断。 -- DEMO 01 SELECT CASE DATE_FORMAT(NOW(),'%Y-%m-%d') WHEN '2019-12-29' THEN 'today' WHEN '2019-12-28' THEN 'yesterday' WHEN '2019-12-30' THEN 'tommor' ELSE 'Unknow' END; -- DEMO 02 SELECT (CASE WHEN 1>0 THEN 'true' ELSE 'false' END) AS result; if(expr1,expr2,expr3) 如果表达式 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。 SELECT IF(1>2,'1>2','1<2') AS result ; SELECT IF(1<2,'yes ','no') AS result ; SELECT IF(STRCMP('test','test'),

视图&事务&存储过程&流程控制

我只是一个虾纸丫 提交于 2019-12-27 16:37:51
视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view 视图名 as select * from 表 inner join 表 on 条件; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图一般只适用于查询,不推荐修改视图的数据,如果修改的话会将原数据进行修改。 修改视图:当组成视图的基本表发生变化后可以通过修改视图来保持于基本表的一致性CREATE OR replace VIEW 视图名 AS SELECT * FROM 基本表;删除视图drop view 视图名; 为什么开发过程中不会使用视图 视图是mysql的功能,如果项目中使用大量的视图,在你想要扩充功能的时候如果这个视图需要对视图修改的话,就需要先将mysql这边的视图修改后去应用程序中修改对应的sql语句,这样的话需要跨部门沟通,所以通常不会使用视图,而是通过修改sql语句进行扩展功能。 触发器 是一种保证数据完整性的方法。由事件来触发并非由程序调用和手动启动。 为什么使用触发器? 触发器是针对于对于某张表数据增insert,改update,删delete的行为,这类操作行为一旦执行就会触发触发器的执行,即自动执行另一端sql代码 创建触发器语法 #针对插入

mysql之触发器trigger

橙三吉。 提交于 2019-12-25 14:11:03
触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1. 监视地点(table) 2. 监视事件(insert/update/delete) 3. 触发时间(after/before) 4. 触发事件(insert/update/delete) 语法: create trigger triggerName after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin sql语句; end; 注:各自颜色对应上面的四要素。 首先我们来创建两张表: #商品表 create table g (   id int primary key auto_increment,   name varchar(20),   num int ); #订单表 create table o (   oid int primary key auto_increment,   gid int, much int ); insert into g(name,num) values('商品1',10),('商品2',10),('商品3',10); 如果我们在没使用触发器之前:假设我们现在卖了3个商品1,我们需要做两件事 1.往订单表插入一条记录 insert into o(gid,much)

存储过程和触发器

匆匆过客 提交于 2019-12-24 12:12:01
为什么需要存储过程 当今的软件大都应用于网络中,而一般应用程序所需数据都保存在数据库中。在没有使用存储过程的数据库应用程序中,用户所编写的应用程序都是从本地计算机(client)向服务器(server)端发送SQL代码来请求对数据库中数据的增删改差操作,服务器对接收到的SQL代码进行编译后执行,并将结果返回给client,再由客户端的软件处理后输出。如果开发者对服务器安全性考虑不周全,就会为黑客提供盗取数据的机会。其中SQL注入是一种常见的方式。 为了防止SQL注入过程泄露企业的商业机密,我们可以通过存储过程把对数据库操作的SQL代码预先编译好并保存在服务器端。这样既减少了网络传输量,又能保证应用程序的运行性能。 然后,我们来看下什么是存储过程 什么是存储过程 存储过程(procedure)类似于C#语言中的方法,它是SQL语句和控制语句的预编译集合。存储过程保存在数据库里,可由应用程序调用执行。 说的简单一点,存储过程就像数据库中运行的方法 存储过程的优点: 执行速度更快---因为存储过程是预编译过的 模块化程序设计—类似方法的复用 提高系统的安全性—防止SQL注入 减少网络流量—只需传输存储过程的名称即可 存储过程分类: 系统存储过程: 系统存储过程提供了管理数据和更新表的机制,并充当从系统表中检索信息的快捷方式。 常用系统存储过程: 用户自定义存储过程: