[数据库] Navicat for Oracle设置唯一性和递增序列实验

这篇文章主要讲述Navicat for Oracle设置唯一性约束和设置某字段为递增序列。文章主要以图文为主,虽然都是非常简单基础的文章,但还是希望对你有所帮助。

推荐前一篇文章:[数据库] Navicat for Oracle基本用法图文介绍

一. 设置唯一性

参考文章:Oracle之唯一性约束(UNIQUE Constraint)用法详解

唯一性约束英文是Unique Constraint,它是指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。

那唯一性约束与主键又有什么区别呢?

你可能会疑惑主键(Primary Key)不是唯一标识一张表的吗?

主键是所有组成主键的列都不能包含空值,而如果唯一性约束由多列组成,其中的部分列可以包含空值。同时,注意Oracle中不容许在相同列上既创建主键又创建唯一性约束。

例如学生表Student(id, stu_id, stu_name, sex, email, year),其中主键是学生学号(stu_id, year),假设该表学生每年都需要录入一遍数据,所以两个字段构成主键。

同时为了方便遍历,序号id也需要设置不同,这时候就需要id设置为唯一性。

唯一性约束可以在创建表时或使用ALTER TABLE语句创建。

创建唯一性约束的SQL语句如下:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
UNIQUE (column1, column2, ... , column_n); 

删除唯一性约束的SQL语句如下:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;  

使用Navicat for Orcale方法如下:

两种方法均可设置唯一性约束:

alter table T_USER_INFO add constraint u_id unique(ID);

alter table T_USER_INFO  add unique(ID);

此时查看表T_USER_INFO结构如下所示,其中用户名为主键:

同样查看唯一性可以看到刚设置的序号ID:

当修改表T_USER_INFO中ID字段,出现相同值或插入数据ID已经存在的时候,会报错:

二. 设置递增序列

前面讲述的插入序号ID,但是数据库中序号肯定会很多,如何在插入ID数据过程中更方便避免重复的插入呢?这就涉及到了设置ID为递增序列的方法。

Navicat for Orcale不像MySQL只需要勾选递增序列即可,它需要SQL语句来设置。所以这部分内容也非常重要,希望对你有所帮助。

主要步骤包括:

1) 设置序列

2) 设置对应序列和表的触发器

3) 插入数据时使用对应的触发器

具体方法如下:

第一部分 设置序列

1.通过点击"其他=》序列"可以操作序列:

2.点击进去后可以设计序列、新建序列、删除序列。

3.同样可以通过代码增加序列,对应上面的表T_USER_INFO用户表。

CREATE SEQUENCE User_Info_SEQ
minvalue 1
maxvalue 9999999999999999999
increment by 1
start with 1;  

4.点击新建的序列User_Info_SEQ后可以发现具体的序列:

第二部分 设置触发器

5. 然后设置对应表T_USER_INFO中字段ID的触发器,实现在向表中插入数据前自动插入自增长的序列。

CREATE OR REPLACE TRIGGER Trigger_User
BEFORE INSERT ON T_USER_INFO
	for each row
	when(NEW.ID is NULL)
	begin
		select User_Info_Seq.Nextval into :NEW.ID from dual;
	end;  

创建成功如下图所示,注意不能缺少when(NEW.ID is NULL),因为在插入数据时会缺省ID这个值,让触发器自动补充。

6.查看表T_USER_INFO结构可以查看对应的触发器:

但有可能会报编译错误[Err] ORA-24344: success with compilation error。其原因是表的所有列名都需要大写,也可以手动添加“更新栏位”,否则如图虽然有增加触发器,但是更新栏位为空,所以这个插入是不成功的,插入时也不会触发主键的序列。

第三部分 插入数据

7.插入数据

insert into T_USER_INFO
	(USERNAME,PWD,STATUS,DW_NAME,DW_CODE)
values('eastmount','000000','2','软件学院','08111003');

此时能插入数据,其中字段ID会自动添加。

如果报错[Err] ORA-00001: unique constraint (GUICAI.SYS_C0017014) violated,如下图所示。这可能是因为表中设置了唯一性ID,出现重复数据的现象。如果不能设置唯一性约束且需要保持唯一性,推荐使用sys_guid()函数产生唯一编码。其实质想法是获取表中最大ID值再自动加1。

参考:Oracle实现类似SQL SERVER列自增长功能-jssg_tzw

Oracle中添加自动编号的序列-左What

oracle中DB设计时id唯一性(或者自增)怎么设置

最后还是希望文章对你有所帮助,这篇文章主要是我关于Navicat for Orcale软件的使用方法,包括设置唯一性和递增序列的实验,主要通过图文的形式进行讲述,可能这个很简单的问题复杂化了,但是对初学者来说还是有一定帮助的,高手勿喷~

最近真的好忙,昨天就睡了4个小时,现在又熬夜到凌晨五点了,但是每每分享一篇博客之后,感觉都非常兴奋或开心,有些东西不能言表,开心就好!

(By:Eastmount 2016-04-11 清晨5点  http://blog.csdn.net/eastmount/)

时间: 2024-09-29 02:08:42

[数据库] Navicat for Oracle设置唯一性和递增序列实验的相关文章

[数据库] Navicat for Oracle基本用法图文介绍

引自百度百科:Navicat for Oracle是一套超强的Oracle数据库系统管理工具.它有极具巧思的图形化用户界面(GUI),让你可以快速且容易的以安全且简单的方法建立.组织.存取及共享资讯.Navicat for Oracle可以让用户连接本地/远端Oracle Server.提供一些实用的工具如数据/结构同步.导入/导出.备份及报表以协助管理数据的流程. 本文主要通过图文的方法介绍了Navicat for Oracle的基本用法,因为最近做J2EE项目涉及到远程数据库连接,故使用了该

用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error

用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准版,一种是简洁版,即Oracle Install Client.而我们用Navicat时通常会在自己的安装路径下包含多个版本的OCI,如果使用Navicat连接Oracle服务器出现ORA-28547错误时,多数是因为Navicat本地的OCI版本与Oracle服务器服务器不符造成的.所以我们要做的

navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法

原文:navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法 navicat是通过oracle客户端连接oracle服务器的. oracle的客户端有两种,一种标准的客户端安装程序,下载地址: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

navicat 连接oracle 数据库会报错

navicat 直连oracle 数据库会报错 ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK 今天使用Navicat连接Oracle数据库,报了下面的这个错误:“ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK” 从这个错误上看,可以知道是客户端不支持服务器端的字符集造成的,但是修改服务器端的字符集是不

Oracle设置默认数据库,ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist

Oracle 设置默认数据库 如果我们的服务器上或者电脑上安装了多个数据库,当我们使用sqlplus时如果为指定数据库时登录到的是哪一个数据库呢?今天遇到了一个老问题: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist 以前也遇到过:根据网上的博文一步一步操作下就OK了,可是今天试了下不行,经过分析发现原来是我登录进入是另一个数据库,可如果每次都指定登录到那个数据库太麻烦了,就去查询了些资料

Navicat连接Oracle数据库用户权限问题

解决Navicat连接Oracle数据库用户权限问题: 第一步:在cmd窗口运行[sqlplus] 第二步:输入Oracle的用户名和口令连接Oracle数据库. 第三步:执行授权代码 [grant dba to 用户名;] 第四部:执行[grant all privileges to 用户名;] 原文地址:https://www.cnblogs.com/lyang-a/p/11638494.html

Win10系统使用Docker安装oracle并通过Navicat for oracle进行登录

一.安装Docker Linux系统可以直接采用命令进行Docker安装: Win7系统安装Dokcer实际通过Boot2Docker在Windows下安装一个VirtualBox来实现: Boot2Docker对于Win10系统的支持不太友好,好消息是现在有了专门为Win10准备的Docker安装包:docker-tollbox; docker-tollbox下载地址:https://www.docker.com/products/docker-tollbox DockerToolbox.ex

使用Navicat连接Oracle数据时的一些问题,连接时错误:ORA-28547,新建用户后连接时错误:ORA-01017

发现Navicat作为一款连接数据库的工具确实很好用,可视化的界面看着舒服很多,下面说说我今天在连接Oracle数据库时的一些问题: 1.安装好Oracle后直接用Navicat是连接不上的,会出现如下图的错误:使用Navicat连接Oracle时必须先下载Oracle的instantclient客户端,去官网下载即可 2.将下载的安装包解压出来:打开Navicat,工具==>OCI==>在OCI library选择刚刚解压出来的oci.dll路径,确定后重启. 3.然后输入我们的连接名,连接

[数据库] Navicat for MySQL事件Event实现数据每日定期操作

在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如:        (1).每天凌晨12点对数据库进行定时备份,结算和汇总:        (2).每天凌晨2点删除数据库前三天的数据:        (3).插入某个数据超过一定时间改变某个值的状态,比如预警系统.        这里就需要通过Event事件进行简单操作,下面将详细处理.你可能会想到通过触发器实现,但是如果是同一张表Insert插入数据后,但是触发器再进行Update更新操作是不行的,所以需要尝试通过Event