oracle关联字段和序列,oracle(9) 序列和约束

5268f80b9b1e01f982625ef6fac83ca1.png

序列 SEQUENCE

也是数据库对象之一,作用:根据指定的规则生成一些列数字。

序列通常是为某张表的主键提供值使用。

主键:通常每张表都会有主键字段,该字段的值要求非空且唯一,

使用该字段来确定表中的每一条记录。

CREATE SEQUENCE SEQ_EMP_ID_JIE

START WITH 1

INCREMENT BY 1;

CREATE SEQUENCE 序列名

[START WITH i] --第一个序列值是I --默认值1

[INCREMENT BY J]--步进是J,下一个值每次加J --默认值1

[MAXVALUE N] --最大值是N

[MINVALUE N] --最下值是N

[CYCLE | NOCYCLE] --达到最大值后或者最小值后是否继续生产序列号

[CACHE] --用来指定先预取P个数据到缓存中,以提高效率,默认值是20;

序列提供了两个伪列:

NEXTVAL:获取序列的下一个数字,第一次获取时返回的是 STAR WITH 指定的数字。

以后都是最后获取的数字加上步进得到的。

NEXTVAL:会导致序列发生步进,且不可回退。

CURRVAL:获取序列当前的数字,即:最后一次生成的数字,且不会发生步进。

新创建的序列,必须使用一次 NEXTVAL 后才能使用 CURRVAL;

SELECT SEQ_EMP_ID_JIE.NEXTVAL FROM DUAL;--运行一次记一次

SELECT SEQ_EMP_ID_JIE.CURRVAL FROM DUAL;--最后一次的数字

删除序列:

DROP SEQUENCE SEQ_EMP_ID_JIE;

测试序列:

CREATE TABLE BIAO(

ID NUMBER(4),

NAME VARCHAR2(20)

);

INSERT INTO BIAO(ID,NAME)

VALUES(SEQ_EMP_ID_JIE.NEXTVAL,‘JACK‘);

SELECT * FROM BIAO;

DROP TABLE BIAO;

索引 INDEX

创建索引的语法:

CREATE [UNIQUE] INDEX 索引名

ON 表名(列名...);

CREATE INDEX INDEX_ENAME

ON EMP_XIAOJIE(ENAME);

复合所用也叫多列索引,是基于多个列的索引。

如果经常在 ORDER BY 子句中使用JOB和SAL排序:

CREATE INDEX EMP_JOB_SAL_JIE

ON EMP_XIAOJIE(JOB,SAL);

SELECT * FROM EMP_XIAOJIE

ORDER BY JOB,SAL;--自动应用 EMP_JOB_SAL_JIE 索引

基于函数的索引

CREATE INDEX EMP_ENAME_UPPER_J

ON EMP_XIAOJIE(UPPER(ENAME));

SELECT * FROM EMP_XIAOJIE

WHERE UPPER(ENAME)=‘KING‘;

修改和删除索引

如果经常在索引上执行DML操作,需要定义重建索引,来提高索引的空间

利用率,语法如下:

重建 EMP_ENAME_UPPER_J 索引:

ALTER INDEX EMP_ENAME_UPPER_J REBUILD;

当一个表中有不合理的所用会导致操作性能下降,删除索引:

DROP INDEX INDEX_ENAME;

合理使用索引提升查询效率:

为了提升查询的效率,创建和使用索引的原则:

*为经常出现在 WHERE 子句中的列创建索引

*为经常垂涎在 GROUP BY、DISTINCT 后面的字段建立索引,

如果建立的是复合索引,索引的字段顺序必须要和这些关键字

后面的顺序一致。

*为经常作为表的连接条件的列上创建索引。

*不要在小表上建立索引。

*限制表上的索引数目,索引不是越多越好。

*删除很少被使用的、不合理的索引。

****** 约束:

定义:

约束全称 约束条件,也叫完整性约束 在DDL 语句中

约束是在数据表上强制执行的一些数据检验规则,当我们执行

dml 操作时,数据必须满足这些规则,如果不符合则无法执行。

作用:

约束条件 可以保证表中数据的完整性,保证数据间的商业逻辑。

类型:

* 非空约束 not null ,简写 NN

* 唯一性约束 unique , 约束字段中的数据不能唯一,简写 UK

* 主键约束 primary key PK

* 外键约束 foreign key FK

* 检查约束 check CK

唯一性约束:UNIQUE UK

drop table day9_zhang;

create table DAY9_ZHANG(

id number (4),

name varchar2(20) unique, -----添加约束的第一种写法

INFO varchar2(30),

OWNER varchar2(10),

CONSTRAINT OWNER_zhang UNIQUE (owner) -----添加约束的第二种写法,能够给约束加一个名字

);

建表后取消约束:

alter table DAY9_ZHANG

modify (NAME varchar2(30));----有问题

alter table DAY9_ZHANG drop constraint OWNER_ZHANG;---删除约束

alter table DAY9_ZHANG drop constraint system.SYS_C0011567;

ALTER TABLE DAY9_ZHANG DROP UNIQUE (NAME);

建表后添加:

alter table DAY9_ZHANG

add constraint INFO_ZHANG unique(INFO);

alter table DAY9_ZHANG

add constraint zhang_idzhang unique(id);

insert into DAY9_ZHANG

values (1,‘QQ‘,‘INFO‘,‘55‘);

insert into DAY9_ZHANG

values (1,‘QQ‘,‘IN‘,‘55‘);

***** 主键约束 PRIMARY KEY

主键约束条件从功能上看相当于 非空约束且唯一的组合。

主键字段可以是单字段或多字段的组合。

作用:

在表中唯一的确定一行的数据。一个表只运行建立一个主键约束,

其他约束条件无个数限制

drop table day9_zhang2;

create table DAY9_ZHANG2(

id number (4),

name varchar2(20), -----添加约束的第一种写法

INFO varchar2(30),

OWNER varchar2(10),

CONSTRAINT ID_zhang PRIMARY KEY (ID) -----添加约束的第二种写法,能够给约束加一个名字

);

* 主键应是对系统无意义的数据

* 永远也不要更新主键,让主键除了唯一标识之外,再无其他的用途

* 主键不应该是动态数据,比如说时间戳

* 主键应该是自动生成,不要人为的干预。 可用序列

* 主键尽量建立在单列上

insert into DAY9_ZHANG2

values(seq_zhang.nextval,...)

外键约束

外键约束条件定义在两个表的字段或者一个表的两个字段上,用于

保证两个字段的关系

比如 EMP_ZHANG 表的DEPTNO 列参照 DEPT 表的DEPTNO 列。 则DEPT 表是主表或者说是父表

EMP 作从表或者子表。被参照字段必须是主键

外键约束对一致性的维护,从两个方面进行数据约束:

*从表上定义外键的列植,必须从主表被参照的列值中选取,或者为 null

*当主表参照列的值被从表参照时主表的改行记录不允许删除。

drop table emp_hua;

create table EMP_HUA(

id number (6),

name varchar2(20),

SAL number(6,2),

DEPTNO number(4)

);

alter table dept_zhang add constraint dept_zhang_pk primary key (deptno);

alter table EMP_HUA

add constraint EMP_HUA_DEPTNO_FK foreign key(DEPTNO)

REFERENces dept_zhang(deptno) ;

reference --参照的意思

insert into EMP_HUA

values(seq.nextval,‘傻逼‘,1000,10);

insert into EMP_HUA

values(seq.nextval,‘垃圾‘,1000,null);

select * from emp_hua;

delete from dept_zhang where deptno=10;

rollback;----回滚操作

外键约束对性能的降低:

如果在一个频繁 dml 操作的表上建立外键,每次DML 操作,都会将导致数据库自动对

外键所关联的对应的表作检查,产生资源开销。另外外键确定了主从表的先后生成关系,

有时候会影响业务逻辑。

为了简化开发,维护数据时不用考虑外键约束,以及大量数据DML 操作时

不需要考虑外键 耗费时间,我们关联时不一定需要外键约束。

检查约束:

员工薪水必须大于2000,增加约束:

select * from emp_hua;

alter table EMP_HUA

add constraint EMP_HUA_CK check (SAL>999);

insert into EMP_HUA

values(seq.nextval,‘电饭锅‘,5555,20);

insert into EMP_HUA

values(SEQ.NEXTVAL,‘肥嘟嘟‘,5555,20);

oracle(9) 序列和约束

标签:唯一性   运行   默认值   select   外键约束   提高   商业   更新   build

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/zhangzonghua/p/oracle_seqence_constraint.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lambda表达式处理异常_lambda表达式内出现异常无法throw抛出

lambda体中有受检异常,为什么不能在lambda表达式外层try catch,只能在lambda里面try catch xxx.getUpdateList().forEach((map) ->{xxxVO vo new xxxVO();BeanUtils.populate(vo,map); // populate方法往外抛了异常list.add(vo);});因为lambda表达式本身没有处理异常的机制…

lambda处理异常四种方式

最近对接第三方呼叫系统,第三方SDK的所有方法里都有异常抛出,因为用到了lambda,所以异常处理还是很必要的。 本文主要用到了四种解决方案: 直接代码块处理自定义函数式接口,warp静态方法通过Either 类型包装通过Pair…

linux 历史命令快捷键,Linux历史命令及bash快捷键

本文环境 Centos71.历史命令1.1 在使用linux中熟练的使用历史命令,能给我很多便捷,下面我来总结一些常用的一些历史命令。a) 执行上一条命令,这个很重要 ,执行上一条命令有四种方法,如下:[rootCentOS-7-64data]#[rootCentOS-7-64 …

linux的shell命令 a,linux shell命令大全(都是随堂笔记)

1. Tftp服务器(上传下载文件)注意:上传和下载文件时不能用目录表示 。因此,需要先cd到当前目录。注意目录权限:chmod 0777目录文件 8进制表示:Chmod的文件、目录的权限U自己 g 所属组 o其它 可加减步骤:安装服务器&…

异常 —— throws

1.1 异常概念 1.2 异常体系 java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运行过程中出现的问题 异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序…

制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...

二、Linux命令基础1、查找文件查找a.c的文件 find -name "a.c"在当前目录搜索a字样的文件 grep "a" *-nR2、解压解压tar.gz文件 tar zxvf xxxxx.tar.gz解压tar.xz文件 先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xx…

执行throw后 后面代码还会执行吗?

1.当我们对throw的对象进行try catch之后 public void re(int i) {if (i > 5){this.i i;}else {try {throw new Exception("数据非法!");} catch (Exception e) {e.printStackTrace();}System.out.println("123");}结果显示:12…

linux怎么查看sklearn版本,Sklearn——Sklearn的介绍与安装

文章目录1.Sklearn简介2.Sklean安装2.1.pip安装2.2.conda安装1.Sklearn简介Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.Sklearn 包含了很多种机器学习的方式:Classification 分类Regression 回归Clustering 非监督分类Dimensionality reduction…

一些防止 Java 代码被反编译的方法

由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环…

linux 离线安装中文,linux离线安装及配置redis-Go语言中文社区

本文以centos7系统为例,介绍离线安装redis步骤一、环境准备检查服务器上是否存在gcc-c的环境,使用命令:rpm -qa | grep gcc-c如果没有该环境,则需要安装该环境,离线安装步骤为:1、获取相关rpm包&#xff0c…

Java学习记录 AWT绘图篇

绘制图形 Canvas画布类 Class Canvas java.lang.Object java.awt.Component java.awt.Canvas 用来 绘制图形 或 捕获用户输入的事件。绘制图形需要绘图方法实现绘制图形 方法说明paint(Graphics g)绘图repaint(Graphics g)重新绘图(刷新 Graphics绘图类 Class Gra…

linux pmap 内存泄露,一个驱动导致的内存泄漏问题的分析过程(meminfo-pmap-slabtop-alloc_calls)...

关键词:sqllite、meminfo、slabinfo、alloc_calls、nand、SUnreclaim等等。下面记录一个由于驱动导致的内存泄漏问题分析过程。首先介绍问题背景,在一款嵌入式设备上,新使用sqllite库进行数据库操作,在操作数据(大量读写操作)一段…

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

Java图形化界面设计之容器(JFrame)详解

Java图形化界面设计之容器(JFrame)详解 Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们…

10个最受欢迎的JavaScript图表库

目前网上有很多用于绘制图表图形的免费JavaScript插件和图表库,技术学派在这里给大家推荐10个比较强大的绘制图表图形的JavaScript图表库。其中一些插件需要主流浏览器的支持,而另外一些经过整合后,也能在不同的平台和老版本的浏览器上工作。…

sudo 命令_su、sudo、sudo su、sudo -i的用法和区别

sudo 命令 1、sudo 简介 sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是…

c语言不能在函数中求数组大小,C语言中数组长度不能用变量定义吗?

翻翻过去那场雪1、C语言中不支持。C中支持变长数组(你可以自行度娘变长数组和alloca函数),但是因为其实在栈上分配,不被推荐使用。做为解决方案,你可以使用C式的malloc函数或者C式的new函数来在堆上动态分配内存,这样长度是完全可…

Java如何基于ProcessBuilder类调用外部程序

Java如何基于ProcessBuilder类调用外部程序 demo1 Testpublic void testProcessBuilder() {ProcessBuilder processBuilder new ProcessBuilder(); // processBuilder.command("ping","127.0.0.1");processBuilder.command("ipconfig");//…

计算机专业课程设计报告c语言,计算机程序设计(C语言)课程设计报告.doc

计算机程序设计(C语言)课程设计报告.doc计算机程序设计C语言课程设计报告题目电子动画时钟 学院 机电工程学院专业 班级090109班学号 姓名 指导教师 设计日期 一、概述选题背景 随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。设计思路…

c语言用栈编写数制转换程序,数制转换-栈的应用(C++实现)

本程序实现的是十进制与不同进制之间的的数据转换,利用的数据结构是栈,基本数学方法辗转相除法。conversion.h#includeusing namespace std;//将十进制的数据n转换成m进制的数据stack conversion(unsigned int n,unsigned int m){stack s;while(n){s.pus…