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解压rar文件权限,linux下使用unrar命令解压*.rar格式文件

使用帮助[userlocalhost ~]$ unrarUNRAR 5.40 freeware Copyright (c) 1993-2016 Alexander RoshalUsage: unrar - -e Extract files without archived pathsl[t[a],b] List archive contents [technical[all], bare]p Print file to std…

lambda表达式无法抛出异常_Lambda 异常处理

lambda表达式无法抛出异常 背景&#xff1a;在一个方法中使用了lambda表达式&#xff0c;表达式中需要捕获异常&#xff0c;使用throws关键字发现并不起作用&#xff0c;必须使用trycatch才行 public class BeanUtil {public static <T,R> List<R> copyList(List…

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

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

异常 —— 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 然后&#xff0c;再用 tar xvf xx…

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

1.当我们对throw的对象进行try catch之后 public void re(int i) {if (i > 5){this.i i;}else {try {throw new Exception("数据非法&#xff01;");} catch (Exception e) {e.printStackTrace();}System.out.println("123");}结果显示&#xff1a;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字节码的抽象级别较高&#xff0c;因此它们较容易被反编译。本节介绍了几种常用的方法&#xff0c;用于保护Java字节码不被反编译。通常&#xff0c;这些方法不能够绝对防止程序被反编译&#xff0c;而是加大反编译的难度而已&#xff0c;因为这些方法都有自己的使用环…

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

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

Java学习记录 AWT绘图篇

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

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

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

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

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

vxworks linux 多线程api,vxWorks多任务编程初探(转)

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合&#xff0c;它本身没有任何运行的含义&#xff0c;只是一个静态实体。而进程则不同&#xff0c;它是程序在某个数据集…

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

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

10个最受欢迎的JavaScript图表库

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

Linux查看lvm元数据,LVM元数据服务lvmetad分析

lvmetad是LVM中用于处理元数据缓存的服务。缓存状态Empty &#xff1a; 系统中可用的设备还没有被添加到lvmetad。Scanning &#xff1a; 部分系统中可用的设备已经被添加进lvmetad。Initialized &#xff1a; 全部系统中可用的设备已经被添加进lvmetad。Outdated &#xff1a;…

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

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