[数据库] 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语句如下:

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

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

  1. ALTER TABLE table_name
  2. 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中创建序列以及序列使用注意事项

  1. CREATE SEQUENCE User_Info_SEQ
  2. minvalue 1
  3. maxvalue 9999999999999999999
  4. increment by 1
  5. start with 1;

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

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

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

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

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

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

第三部分 插入数据
7.插入数据

  1. insert into T_USER_INFO
  2. (USERNAME,PWD,STATUS,DW_NAME,DW_CODE)
  3. 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错误。

Navicat for Oracle设置唯一性和递增序列的更多相关文章

  1. Oracle 建表,递增序列,触发器,分析函数row_number() ,partition by 子句。

    create table SC ( Id INTEGER, Name nvarchar2(20) , KC_Name nvarchar2(20), KC_score INTEGER , constra ...

  2. 在mysql Navicat中怎样设置ID自动递增

    1.打开设计表 2.在添加或变更表结构时,把id字段设置为整型,下面的选项就会出现auto increment的选择框,勾选中就可以了.

  3. oracle设置自动增长序列

    我们在用MS SQL Server时,可以为表的主键设置为自动加1的效果;但是在Oracle当中,我们是无法直接设置一个字段为自动加1,需要先建立一个Sequence,然后为这个表创建一个Trigge ...

  4. 【mysql】一对一关系的理解,以及Navicat Premium怎么设置字段的唯一性(UNIQUE)?

    背景:一对一关系设计方法: 设计2张表:customer表,student表 学生表中通过字段customer_id与customer表产生关系. student表中的customer_id与cust ...

  5. Navicat for Oracle实现连接Oracle

    不知道为什么,从一开始,我就不喜欢Oracle,名字好听,功能强大,但总感觉"高不可攀";或许是因为我觉得其他的数据库就可以解决数据问题,不太了解Oracle的优势:而且它长得也不 ...

  6. oracle数据库ID自增长--序列

    什么是序列?在mysql中有一个主键自动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键自动增长,两者功能是一样的,只是 ...

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

    发现Navicat作为一款连接数据库的工具确实很好用,可视化的界面看着舒服很多,下面说说我今天在连接Oracle数据库时的一些问题: 1.安装好Oracle后直接用Navicat是连接不上的,会出现如 ...

  8. mac版本navicat连接oracle报错ORA-21561

    最近电脑更换成mac,很多软件都和win不一样了,正在慢慢适应,连接oracle原来用的客户端是pl/sql develop,蛋疼的是没有了mac版本, 用了navicat,具体设置如下 1.新建连接 ...

  9. navicat 连接 oracle

    环境:windows2008r2(x64) oracle 11.2.0.1 1.找到Oracle服务端的NetManager程序(一般在开始菜单->oracle->配置和移植工具)中,修改 ...

随机推荐

  1. java之格式化输出

    参考http://how2j.cn/k/number-string/number-string-foramt/320.html#nowhere 格式化输出 如果不使用格式化输出,就需要进行字符串连接, ...

  2. Spark 各个组件关系

    Term Meaning Application User program built on Spark. Consists of a driver program and executors on ...

  3. ubuntu下php7安装及配置

    直接用apt-get 失败 在官网下安装包http://tw2.php.net/get/php-7.0.18.tar.bz2/from/a/mirror 进行make时 出现错误: libtool: ...

  4. CentOS6.5添加rbd模块

    [root@ceph-monitor opt]# modprobe rbd   FATAL: Module rbd not found. Once you have deployed the almi ...

  5. Codeforces Round #522 Div2C(思维)

    #include<bits/stdc++.h>using namespace std;int a[200007];int b[200007][7];int ans[200007];int ...

  6. css3旋转立方体-_-

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. jmeter 正则获取参数集合和ForEach控制器结合使用(转)

    怎么把第一个请求获取的返回的多个id,在第二个请求中逐个以单个id作为请求参数来请求? 为了解决这个问题,模拟下该场景 1.请求www.163.com 主页,获取响应中的所有数字,这个获取的数字集合暂 ...

  8. KVM虚拟机CPU绑定性能调优(宿主机上操作)

    获取kvm的pid ps -ef | grep kvm 通过pid找到vcpu在那个物理cpu上,没有绑定固定物理cpu时,执行下面命令可以看出vcpu在不同的物理cpu上切换重复执行 ps -eLo ...

  9. python之Selenium库的使用

    一  什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并 ...

  10. 安装mongodb并配置

    下载网址http://dl.mongodb.org/dl/win32/x86_64 mongodb-win32-x86_64-2008plus-ssl-v3.4-latest.zip 解压d盘命名mo ...