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错误。
Navicat for Oracle设置唯一性和递增序列的更多相关文章
- Oracle 建表,递增序列,触发器,分析函数row_number() ,partition by 子句。
create table SC ( Id INTEGER, Name nvarchar2(20) , KC_Name nvarchar2(20), KC_score INTEGER , constra ...
- 在mysql Navicat中怎样设置ID自动递增
1.打开设计表 2.在添加或变更表结构时,把id字段设置为整型,下面的选项就会出现auto increment的选择框,勾选中就可以了.
- oracle设置自动增长序列
我们在用MS SQL Server时,可以为表的主键设置为自动加1的效果;但是在Oracle当中,我们是无法直接设置一个字段为自动加1,需要先建立一个Sequence,然后为这个表创建一个Trigge ...
- 【mysql】一对一关系的理解,以及Navicat Premium怎么设置字段的唯一性(UNIQUE)?
背景:一对一关系设计方法: 设计2张表:customer表,student表 学生表中通过字段customer_id与customer表产生关系. student表中的customer_id与cust ...
- Navicat for Oracle实现连接Oracle
不知道为什么,从一开始,我就不喜欢Oracle,名字好听,功能强大,但总感觉"高不可攀";或许是因为我觉得其他的数据库就可以解决数据问题,不太了解Oracle的优势:而且它长得也不 ...
- oracle数据库ID自增长--序列
什么是序列?在mysql中有一个主键自动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键自动增长,两者功能是一样的,只是 ...
- 使用Navicat连接Oracle数据时的一些问题,连接时错误:ORA-28547,新建用户后连接时错误:ORA-01017
发现Navicat作为一款连接数据库的工具确实很好用,可视化的界面看着舒服很多,下面说说我今天在连接Oracle数据库时的一些问题: 1.安装好Oracle后直接用Navicat是连接不上的,会出现如 ...
- mac版本navicat连接oracle报错ORA-21561
最近电脑更换成mac,很多软件都和win不一样了,正在慢慢适应,连接oracle原来用的客户端是pl/sql develop,蛋疼的是没有了mac版本, 用了navicat,具体设置如下 1.新建连接 ...
- navicat 连接 oracle
环境:windows2008r2(x64) oracle 11.2.0.1 1.找到Oracle服务端的NetManager程序(一般在开始菜单->oracle->配置和移植工具)中,修改 ...
随机推荐
- [CentOS7] 磁盘分区(gdisk, fdisk)
声明:本文主要总结自:鸟哥的Linux私房菜-第七章.Linux 磁碟與檔案系統管理,如有侵权,请通知博主 磁盘分区步骤: 1.先找出当前有哪些磁盘lsblk或blkid(也就是确定是sda还是vda ...
- Spark BlockManager 概述
Application 启动的时候: 1. 会在 SparkEnv 中实例化 BlockManagerMaster 和 MapOutputTracker,其中 (a) BlockManagerMast ...
- CTO成长之路分享会
1. 李宏玮,纪源资本合伙人GGV,设计无人机,典型的投资: VC做投资,收入利润上市技术团队,架构支撑前沿科技,以后牛逼公司以技术为主 2. 小红书tiger2003加入谷歌,之前学phpgoogl ...
- 魔卡少女(cardcaptor)——线段树
题目 [题目描述] 君君是中山大学的四年级学生.有一天在家不小心开启了放置在爸爸书房中的一本古书.于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地.这时 ...
- Repeater+AspNetPager+Ajax留言板
最近想要巩固下基础知识,于是写了一个比较简单易懂实用的留言板. 部分样式参考了CSDN(貌似最近一直很火),部分源码参照了Alexis. 主要结构: 1.前期准备 2.Repeater+AspNetP ...
- Jmeter如何提取响应头部的JSESSIONID【转】
一.测试前准备 1.测试地址: 登录:http://XXXX:8080/futureloan/mvc/api/member/login 充值:http://XXXX:8080/futureloan/m ...
- HDU1425 A Chess Game
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1524 思路:题目就是给你一个拓扑图,然后指定点的位置放棋子,然后两人轮流移动棋子(题目中的边的关系),直到 ...
- Jmeter性能测试-----参数化方法CSVRead函数
Jmeter里面参数化的方法有很多,大家可以结合自己的项目情况来使用哪种方式来调用测试 数据. 下面我给大家介绍下Jmeter里CSVRead函数来获取参数的方法: 我这里已去到直播间发表评论为例(这 ...
- DHCP服务器的设计
介绍 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理.分配IP地址,使网络环境中的主机动态的 ...
- heapq模块
该模块提供了堆排序算法的实现.堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点. 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.hea ...