这篇文章主要讲述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用户表。
序列参数详见:oracle中创建序列以及序列使用注意事项

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。

参考:[OARCLE]在Oracle中生成GUID类型--SYS_GUID()函数
test01(ID varchar2 32, NAME varchar2 20)
insert into "test01" values (sys_guid(),'张三');

如果报错:[Err] ORA-00001: unique constraint  violated
它是因为在插入数据过程中ID出现重复数据违背了唯一性约束,可以修改ID值,或设置增大序列为最大值。即: start  with  5000, 但连续插入两次时就会成功插入。
最后我删除了唯一性约束,仅仅通过触发器插入递增序列,防止violated错误。

参考: Oracle实现类似SQL SERVER列自增长功能-jssg_tzw
           Oracle中添加自动编号的序列-左What
           oracle中字段递增的实现-百度文库
           oracle中DB设计时id唯一性(或者自增)怎么设置
          SYS_GUID()与sequence的比较
          oracle数据库的主键递增问题,插入数据问题

最后还是希望文章对你有所帮助,这篇文章主要是我关于Navicat for Orcale软件的使用方法,包括设置唯一性和递增序列的实验,主要通过图文的形式进行讲述,可能这个很简单的问题复杂化了,但是对初学者来说还是有一定帮助的,高手勿喷~
最近真的好忙,昨天就睡了4个小时,现在又熬夜到凌晨五点了,但是每每分享一篇博客之后,感觉都非常兴奋或开心,有些东西不能言表,开心就好!
(By:Eastmount 2016-04-11 清晨5点   http://blog.csdn.net/eastmount/ )

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

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

    引自百度百科:Navicat for Oracle是一套超强的Oracle数据库系统管理工具.它有极具巧思的图形化用户界面(GUI),让你可以快速且容易的以安全且简单的方法建立.组织.存取及共享资讯. ...

  2. Navicat怎么看oracle作业,[数据库] Navicat for Oracle基本用法图文介绍

    打开具体的T_USER_INFO.sql文件代码以下所示: /* Navicat Oracle Data Transfer Oracle Client Version : 11.2.0 Source ...

  3. 用 Navicat for Oracle 管理 Oracle10g/11g 数据库

    Navicat for xxx 是一个优秀的数据库管理客户端,有 MySQL.Oracle 等版本.建议大家最好用 Enterprise 版本,功能全面一些,但较之于免费的 Lite 版,企业版可是要 ...

  4. 只安装和配置instantclient,用plsql developer,navicat for oracle,sqlplus连接oracle数据库 ....

    环境配置: 1.到oracle官网下载instantclient basic包,解压缩到E:\oracle\instantclient_11_2: 2.设置环境变量 NLS_lANG=SIMPLIFI ...

  5. Navicat连接Oracle数据库失败,提示无效的用户名和密码(Invalid username and password)

    1.Navicat是一款非常好用的数据库管理工具,可是一段时间没有使用,突然发现之前建立的Oracle连接无法打开,提示要输入旧密码和新密码以及确认新密码,在Navicat管理工具中连接之前超过180 ...

  6. 阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库

    阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库 需要切换到阿里云镜像的,仅供参考 使用yum -y update更新软件 1. 关闭防火墙 systemc ...

  7. navicat 连接Oracle数据库及报错问题处理:ORA-28547 nonnection to server failed, probable Oracle Net admin error

    今天需要连接一个oracle数据库,因为之前用过navicat for oracle,所以首选还是用navicate来连接,还有一个原因就是用官方的客户端连接的话还要来配置文件比较麻烦. 首先需要先安 ...

  8. navicat链接oracle不显示用户下的相关数据库和表【Navicat 连接 Oracle数据库常见问题】

    在使用Navicat连接Oracle的过程中大家可能会碰到这样或者那样的很多的问题,本文中汇总了一在使用Navicat连接Oracle的过程中大家可能会碰到这样或者那样的很多的问题,本文中汇总了一些让 ...

  9. linux设置定时备份任务,Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters ...

最新文章

  1. mysql中blob_MySQL中的BLOB类型
  2. matlab有没有查找替换,matlab-字符查寻与替换
  3. 梦断代码阅读笔记之一
  4. 【SPOJ】Count On A Tree II(树上莫队)
  5. BigDecimal的四舍五入的RoundingMode 选择
  6. C++ 动态创建对象数组
  7. opcuaclient 文档_连接协议-OPC UA Client
  8. CCIE学习(7)——VLAN相关命令汇总
  9. APNS提供了两项基本的服务:消息推送和反馈服务
  10. python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(1)
  11. JS中的运算符和数组
  12. Temporal注解笔记
  13. 10.程序员的自我修养---内存
  14. 来了 | Python 官方发布整套中文PDF文档(共27本)
  15. 安装SVN后,更新项目没有对号等图标
  16. ubuntu  管理员权限 文件操作
  17. Android手机界面绘制类似wifi信号图标
  18. msn名字大集合(转)
  19. 局域网arp攻击_一篇文章告诉你,什么是ARP协议与ARP欺骗
  20. 淘宝天猫抓包评论地址

热门文章

  1. 为什么要关闭 MySQL Query Cache?
  2. 003 Rabbitmq中交换机的类型
  3. 洛谷 P1202 模拟 - 黑色星期五 Friday the Thirteenth
  4. 非刚性人脸跟踪 —— 人脸跟踪
  5. CentOS7——卡在在启动界面
  6. hello cnblogs(从wordpress、收费空间到博客园)
  7. 每日程序C语言5-斐波那契兔子数
  8. windows时间同步软件_有没有好用的windows时间管理软件?这款便签软件帮你
  9. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵
  10. Java黑皮书课后题第7章:*7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数。指定如下方法头