触发器

Oracle实现主键自增的几种方式

若如初见. 提交于 2019-12-04 01:19:56
数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去自己来实现,下面有几种实现的方式 一、序列化+触发器 第一步在表结构完整的情况下创建一个序列 CREATE SEQUENCE SEQ_NAME INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999 START WITH 1 CACHE 20 第二部创建触发器 CREATE OR REPLACE TRIGGER TRIGGER_NEW BEFORE INSERT ON TABLE_NAME REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE WHEN (NEW.ID IS NULL) BEGIN SELECT SEQ_NEW INTO : NEW.ID FROM DUAL END 二、序列+显示调用 同样先创建触发器 CREATE SEQUENCE SEQ_NAME INCREMENT BY 1 MINVALUE 1 NOMAXVALUE START WITH 1 NOCYCLE NOCACHE 下面显示调用 INSERT INTO TABLE_NAME VALUES(SEQ

Flink 实现指定时长或消息条数的触发器

落花浮王杯 提交于 2019-12-04 00:47:13
Flink 中窗口是很重要的一个功能,而窗口又经常配合触发器一起使用。 Flink 自带的触发器大概有: CountTrigger: 指定条数触发 ContinuousEventTimeTrigger:指定事件时间触发 ContinuousProcessingTimeTrigger:指定处理时间触发 ProcessingTimeTrigger: 默认触发器,窗口结束触发 EventTimeTrigger: 默认处理时间触发器,窗口结束触发 NeverTrigger:全局窗口触发器,不触发 但是没有可以指定 时间和条数一起作为触发条件的触发器 ,所有就自己实现了一个(参考:ProcessingTimeTrigger、CountTrigger) 先看下测试数据生成代码,有个判断语句,随机睡眠一定时间,控制条数和时间触发器的都可以触发 while (true) { val map = Map("id" -> i, "createTime" -> getCreateTime(), "amt" -> (MathUtil.random.nextInt(10) + "." + MathUtil.random.nextInt(10))) val jsonObject: JSONObject = new JSONObject(map) println(jsonObject.toString()) /

MySQL之存储过程

末鹿安然 提交于 2019-12-03 23:06:55
什么是存储过程: 一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法。存储过程是一段预编译好的代码,存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用 存储过程优势   存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要时从数据库中直接调用,省去了编译的过程   提高了运行速度   同时降低网络数据传输量 存储过程与自定义函数的区别   存储过程实现的过程要复杂一些,而函数的针对性较强   存储过程可以有多个返回值,而自定义函数只有一个返回值   存储过程一般可独立执行,而函数往往是作为其他SQL语句的一部分来使用 存储过程语句 1、创建存储过程   CREATE PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]])   routime_body   proc_parameter : [IN|OUT|INOUT] parameter_name type   其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型 2、查看存储过程列表   SHOW PROCEDURE STATUS; 3、查看存储过程定义

postgresql:给表添加触发器

落花浮王杯 提交于 2019-12-03 22:36:55
触发器功能:向user表中插入一条数据,如果表中没用数据,则字段created_by必须为空;表中有数据则created_by必须不为空. 新建储存过程函数; CREATE OR REPLACE FUNCTION public.onaddfirst() RETURNS trigger LANGUAGE plpgsql AS $function$ DECLARE total integer; BEGIN SELECT count(*) INTO total FROM public.user; IF total != 0 THEN IF NEW.created_by IS NULL THEN RAISE EXCEPTION 'created_by cannot be null'; END IF; ELSE IF NEW.created_by is not NULL THEN RAISE EXCEPTION 'created_by must be null when you insert first user'; END IF; END IF; RETURN NEW; END; $function$; 添加触发器 -- DROP TRIGGER onadd ON public."user"; create trigger onadd before insert on public.

触发器添加数据不重复例子

三世轮回 提交于 2019-12-03 20:16:07
--创建表 CREATE TABLE a( a1 nvarchar(50) NULL, a2 int NULL ) --查询数据 select * from a --添加数据 insert into a values('1',2) --清除数据 truncate table a --触发器 alter trigger tri_insert_a on a INSTEAD OF insert as begin --在插入数据时,检查最新的100条数据里、有多少条重复记录(按a1,a2两个字段检查重复);如果重复记录超过1条,就不再插入数据。 SELECT * FROM a INSERT INTO a(a1, a2) SELECT I.a1,I.a2 FROM INSERTED I left JOIN ( SELECT TOP(100) a1, a2 FROM a WITH(NOLOCK) ) T ON i.a1 = i.a1 AND I.a2 = T.a2 GROUP BY i.a1, i.a2 HAVING COUNT(t.a1) < 1 and count(t.a2)<1 end    来源: https://www.cnblogs.com/Zhengxue/p/11806523.html

触发器 new和old before和after

橙三吉。 提交于 2019-12-03 20:07:17
new是新插入的数据,old是原来的数据 insert只会有new,代表着要插入的新记录 delete只会有old,代表着要删除的记录 update由于执行的是先删除旧的记录,再插入新的记录,因此new和old都会有,且含义与上面的相同 new在before触发器中赋值,在after触发器中取值。 在对new赋值的时候只能在触发器before中只用,在after中是不能使用。 来源: https://www.cnblogs.com/ms-grf/p/11806055.html

查询代码在哪个视图、存储过程、函数、触发中使用过

可紊 提交于 2019-12-03 15:41:05
工作中偶尔会出现:想用A数据表替换B数据表,然后把B数据表删除。但是,又不知道B数据表在哪个视图、存储过程、函数、触发器中使用过? 经过一番度娘,看到实现方法也不难,主要涉及两个系统表:sysobjects及syscomments。 1、先来复习一下sysobjects表结构。 列名 数据类型 描述 name sysname 对象名。 id int 对象标识号。 xtype char(2) 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K ) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K ) V = 视图 X = 扩展存储过程 uid smallint 所有者对象的用户 ID 。 info smallint 保留。仅限内部使用。 status int 保留。仅限内部使用。 base_schema_ ver int 保留。仅限内部使用。 replinfo int 保留。供复制使用。 parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID )

SQL数据库相关

佐手、 提交于 2019-12-03 10:34:09
数据库相关知识点 SQL, 对表的理解, 对表的 主键, 外键 的理解, 视图, 为什么要有视图, 视图有什么功能, 视图与表有什么区别 主键是唯一标识的一条记录,不能重复,不能为空. 表的外键是另一个表的主键,可以重复,可以为空 索引,字段没有重复值,可以有空值,可以有一个或者多个唯一索引. 视图  是一个或者多个表按照条件组合成的结果集 对表用增删改查等SQL进行操作,对视图权用select操作 表是物理存在的,视频是虚拟的内存表 存储过程, 什么是存储过程 是一组完成特定功能的程序集,编译存放数据库中,用户指定名称和参数就可以执行,接受参数,返回单个或多个结果集 储存过程创建编译时存在Precedure Cache中,所以比SQL执行要快 储存过程存在服务器端,容易修改,而SQL存在客户端,修改后部署比较麻烦 如何通过Dataset更新数据 使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人。 sql server中Join有几种 JOIN: 如果表中有至少一个匹配,则返回行 (也就是 inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行

day37 学习小结

不羁岁月 提交于 2019-12-03 10:15:15
目录 一、事物 1. 事物的使用方法 2. 事物的特性 3. 储存引擎 二、视图 1. 增加视图 2. 删除视图 三、触发器 1. 增加触发器 2. 查看触发器 3. 删除触发器 四、存储 过程 1. 创建过程 2. 使用这个过程 3. 删除过程 五、函数 六、备份 1. 用法 2. 重新导入 一、事物 通俗的说,事物指一组操作,要么都执行成功,要么都执行失败。 1. 事物的使用方法 start transaction; sql语句 commit(提交)/rollback(回滚到事物开始的地方) 2. 事物的特性 原子性(Atomicity):原子意为最小的粒子,即不能再分的事务,要么全部执行,要么全部取消。 一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配。 隔离性(Isolation):简单点说,某个事务的操作对其他事务是不可见的。 持久性(Durability):当事务完成后,其影响应该保留下来,不能撤销,只能通过“补偿性事务”来抵消之前的错误。 3. 储存引擎 Innodb:支持事务,支持行锁 MyISAM:不支持事务,只支持表锁 二、视图 1. 增加视图 create view 视图名 as SQL语句; 2. 删除视图 drop view 视图名; 三、触发器 当两个操作同时发生时,其中一个操作可以出发另一个操作,如果该操作一致不完成

11.01 事务,视图,触发器,存储过程,函数,数据库备份

走远了吗. 提交于 2019-12-03 10:08:37
事务 事务指的是一组操作,要么执行成功,要么都执行失败 ''' 例: 银行汇款,当我給朋友汇款的时候,我的银行存款已经扣除,他的银行存款未增加的时候断电了,怎么办? 可以使用事务解决这个问题 ''' 事务使用 start transaction; sql语句 commit/rollback; commit:是提交,让事务的语句执行成功, rollback:是回滚,在语句内的所有任务回到起始位置. 特性******* 原子性(Atomicity): 原子意为最小的粒子,即不能在分的事务,要么全部执行,要么全部取消 一致性(Consistency): 指事务发生前和发生后,数据的总额依然匹配 隔离性(Isolation): 就是,某个事务的操作对其它事务是不可见的 持久性(Durability): 当事务完成后,其影响应该2保留下来,不能撤销,只能通过"补偿性事务"来抵消之前的错误 存储引擎******* InnoDB: 相当于→保时捷引擎 MyIsam: 相当于→奔奔引擎 建表的时候: create table user( id int, name varchar(32) )engine=Innodb charset utf8; mysql5.5以上,默认Innodb引擎 mysql5.5以下,默认Myisam引擎 引擎区别******* innodb支持事务,myisam不支持事务