oracle(12.18)

约束

一,主键(唯一,并且主键所在字段应无任何业务意义,永远不要需要修改)
方法一:Create table 表明(字段1 字段1类型 constraint 约束名 Primary Key,字段2 字段2类型…字段N字段N类型);
方法二:Alert table table_name add constraint constratint_name Primary Key(column_name[,column_name2]);
(一个表里面只有一个主键,一个主键可以有多个字段,也就是复合主键)
y
二,外键(不能连另一张表没有的字段,一般都连接另一张表的主键)
方法一:Create table 表明 (字段1 字段一类型 constraint 约束名 references State(column_name),字段2 字段2类型…字段N字段N类型);
方法二:Alert table table_name add constraint constratint_name Foreign Key(column_name) references table_name(column_name);

三,检查
方法一:Create table 表明 (字段1 字段1类型 constraint column_name check ( column_name >= x),字段2 字段2类型…字段N字段N类型);
方法二:Alert table table_name add constraint constratint_name Check( column_name >= x);

四,唯一(像 hashmap 中key 一样,不可以重复)
方法一:Create table 表明 (字段1 字段1类型 constraint column_name unique ,字段2 字段2类型…字段N字段N类型);
方法二:Alert table table_name add constraint constratint_name unique ( column_name1[,column_name2]);
方法三: Create table 表明 (字段1 字段1类型 unique ); 会产生一串随机的约束名,如果不去查找

五,激活/禁用
方法一:Alert table table_name enable[ novalidate | validate] | disable constraint constraint_name
(enable :开启 novalidate:不验证,不检测以前的数据 validate:验证,检测以前的数据)默认是validate
(disable : 禁用 )
enable 和 disable 约束将来的数据

六,删除
方法一: alert table 表名 drop constraint constraint_name

注: 1,约束名全局共享,所以要标记出表明,字段名,防止冲突
2,主键缩写pk, 外键缩写fk
3,约束在DML 操作时,检测操作是否合法,如果时大批量的dml操作,并且知道数据来源一定可靠,或者导入数据比数据安全更重要时,可以关闭约束 主表(主键表) 子表(外键表)
4,要重建主表时,临时删除主表时,子表的外键约束应该关闭或者删除
5,在删库时,应该先删除外键表,在删除主键表,否则报错

序列

一,创建
	create  sequence  sequence_name  [start  with ?]  [increment  by  ?]    [minvalue  ?  |  nominvalue ]  [maxvalue  n   |   nomaxvalue ]  [ cache  n  |  nocache]   [ cycle  |  nocycle  ]   [  order  |noorder]
	创建 序列  序列名  开始于?  递增 ? [ 最小值?| 没有最小值  ]  [最大值  ?|  没有最大值]  [ 缓存数? |  没有缓存] [循环 |  不循环] [ 排序  |  不排序 ]
	序列的作用是辅助技术,或者快速生成自增主键的工具
	create  sequence  seq_demo1_pk;
	[ cache  n  |  nocache]  :  是否预先缓冲一些计算好的序列值,即加好了递增值的结果。预先加载多少?
	[ cycle  |  nocycle  ]  : 给定了最大最小值后,超出最大值,是否从最小值从新技术
	 [  order  |noorder]  :   是否是绝对递增

	(catch → 缓存(免计算,最高速)
	    order  →  指针,指向缓存的
	 速度比较: catch→ noorder→ order	)
二,删除
	drop  sequence  sequence_name

在这里插入图片描述

触发器

提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表事件相关的特殊的存储过程,他的执行不是由程序调用,也不是手工启动,而是由事件来出发,比如当对一个表进行操作(insert , delete ,update) 时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
一,创建
  create   [ or  replace ]  **trigger**   trigger_name    
	 	[  before  |  after  |  instead of  ]  
	 	trigger_event  
	 on   table_name    view_name  |  user_name  |  db_name  
	 	 [  for   each   row ]  
	 	  [ when  trigger_condition]    (判断是否执行后续的处理,这个可以在后期判断)

 	   begin   
 	   	 plsql_sentences;
 	   	 (解释:pl/sql编程 
 	   	  		:new    代表 insert 的数据,update执行前的数据
 	   	  		:old      代表 delete 的数据,  update执行后的数据
 	   	  	触发器可以连写,insert,delete,update。实行触发器时对这些条件进行判断,时那种状态   :if  **  then  **  elseif   **   then   endif
			)
 	   end
 	   	  tri_name;
(:=   表示赋值)

在这里插入图片描述
触发器组成:
触发事件trigger : 引起触发器被触发的事件。例如: DML语句(insert,updatedelete 语句对表或视图执行数据处理操作)、DDL 语句( 如 create 、 alter 、drop 语句在数据库中创建、修改、删除模式对象)、数据库系统事件(如系统启动或退出、异常错误)、用户事件(如登录或退出数据库)。
触发时间 before | after | instead of : 即该trigger 是在触发事件发生之前(before) 还是之后(after )触发,也就是触发事件和该trigger的操作顺序。
触发操作 plsql——sentences: 即该trigger 被触发之后的目的和意图,正式触发器本身要做的事情。例如:PL/SQL 块。
触发对象 On : 包括表、视图、模式、数据库。只有在这些对象上 发生了符合条件的触发事件,才会执行触发操作。
触发条件 tri_condition : 由when 子句指定一个逻辑表达式。只有当该表达式的值为true时,遇到触发事件才会自动执行触发器使其执行触发操作。
触发频率 for each row : 说明触发器内定义的动作被执行的次数。即语句级(statement) 触发器和行级(row) 触发器。

二,使用
	触发器触发次序
		1,执行before 语句级触发器
		2, 	a) 执行before 行级触发器
			b) 执行dml语句
			c) 执行after 行级触发器
		3,执行 after 语句触发器
三,触发器序列自增长
	触发器:
		create  or  replace  trigger   trigger_name
		 	before   insert   on  table_name
		 	for  each   row
		 begin   
		 	select   sequences_name.nextval   into :  new  pk_name   dual;
		 	10G 版本后
		 	:  new . pk_coiumn_name : =  seq_name.nextval;
		 end  trigger_name 
四,触发器发生错误
	raise_application_error(-20001,'下半年禁止删除仓库表数据');
五,PL/SQL的分支语句
	if  ****  then   ****  endif
	if  ****  then   ****  elsif   ****  then  ****  endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值