iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle主键及约束
  • 355
分享到

Oracle主键及约束

2024-04-02 19:04:59 355人浏览 薄情痞子
摘要

oracle主键Primary Key包含非空约束及唯一约束。添加主键的语句alter table table_name add constraint cons_name primary key(col_n

oracle主键Primary Key包含非空约束及唯一约束。

添加主键的语句

alter table table_name add constraint cons_name primary key(col_name);

查看主键是否被创建成功

select dbms_metadata.get_ddl('OBJECT_TYPE','NAME','SCHEMA') from dual;

OBJECT_TYPE (TABLE,PARTITioN,INDEX......)

NAME (OBJECT_NAME)

SCHEMA (INSTANCE)

对应object表中的相应内容:

select object_type,object_name,owner from dba_objects

 

获取到的DDL语句中表示已经创建了主键列,该列位于CUSTTEL上

CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK" 
   ( "CUSTTEL" VARCHAR2(20), 
 "USERLEVEL" NUMBER(*,0) NOT NULL ENABLE, 
 "CUSTID" VARCHAR2(20)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "NEWCCS" ;
 
  ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);

创建主键后发现该表增加了唯一索引及主键字段

CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK" 
   ( "CUSTTEL" VARCHAR2(20), 
 "USERLEVEL" NUMBER(*,0) NOT NULL ENABLE, 
 "CUSTID" VARCHAR2(20), 
  CONSTRAINT "PK_PRIMARY" PRIMARY KEY ("CUSTTEL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "NEWCCS"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "NEWCCS" ;
 
  CREATE UNIQUE INDEX "NEWCCS"."PK_PRIMARY" ON "NEWCCS"."USERLEVELBYTEL_BAK" ("CUSTTEL") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "NEWCCS" ;
 
  ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" ADD CONSTRAINT "PK_PRIMARY" PRIMARY KEY ("CUSTTEL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "NEWCCS"  ENABLE;
 
  ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);

 

验证:

反复向表中插入数据 insert into userlevelbytel values('10010','3',' ');

出现如下错误提示(唯一约束错误):

ORA-00001: unique constraint (NEWCCS.PK_PRIMARY) violated

插入空值 insert into userlevelbytel values('','3',' ');

出现如下错误提示(唯一约束错误):

ORA-01400: cannot insert NULL into ("NEWCCS"."USERLEVELBYTEL_BAK"."CUSTTEL")

 

单独添加唯一约束对比区别

删除该表主键:

alter table userlevelbytel_bak drop constraint pk_primary;

CREATE TABLE "NEWCCS"."USERLEVELBYTEL_BAK" 

   ( "CUSTTEL" VARCHAR2(20), 

 "USERLEVEL" NUMBER(*,0) NOT NULL ENABLE, 

 "CUSTID" VARCHAR2(20), 

  CONSTRAINT "UNIQUE_CUSTTEL" UNIQUE ("CUSTTEL")

  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "NEWCCS"  ENABLE

   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "NEWCCS" ;

 

  CREATE UNIQUE INDEX "NEWCCS"."UNIQUE_CUSTTEL" ON "NEWCCS"."USERLEVELBYTEL_BAK" ("CUSTTEL") 

  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "NEWCCS" ;

 

  ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" MODIFY ("USERLEVEL" NOT NULL ENABLE);

 

  ALTER TABLE "NEWCCS"."USERLEVELBYTEL_BAK" ADD CONSTRAINT "UNIQUE_CUSTTEL" UNIQUE ("CUSTTEL")

  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "NEWCCS"  ENABLE;

可以看到唯一约束被创建

测试

反复插入非空记录:

ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated

反复插入空记录:

select * from userlevelbytel_bak where custtel is null;

查询结果为多个重复的空记录

 

这里面可以看出唯一约束仅对非空值进行约束,而在Oracle中NULL值无法比较,因此即使反复插入,唯一约束也无法限制,但在组合约束条件下,比如(A,B,NULL)则是可以进行比较的。

举例:

alter table userlevelbytel_bak add constraint unique_custtel unique(custtel,userlevel);

反复插入空记录:

ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated

您可能感兴趣的文档:

--结束END--

本文标题: Oracle主键及约束

本文链接: https://www.lsjlt.com/news/43491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【MySQL】主键约束和外键约束
    目录 1、PRIMARY KEY 2、FOREIGN KEY 3、表的设计 3.1 一对一 3.2 一对多 3.3 多对多 1、PRIMARY KEY 上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就...
    99+
    2023-09-01
    mysql 数据库
  • MySQL主键约束和外键约束详解
    目录1、PRIMARY KEY2、FOREIGN KEY3、表的设计3.1 一对一3.2 一对多3.3 多对多1、PRIMARY KEY 上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这...
    99+
    2023-03-13
    mysql主键约束和外键约束 mysql主键和外键
  • SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束
    文章目录 约束约束介绍和分类非空约束唯一约束主键约束默认约束案例练习外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库中数据的正确性、有效性和完整性 ...
    99+
    2023-08-17
    sql 数据库 mysql
  • oracle怎么创建主键约束
    要在Oracle数据库中创建主键约束,可以使用以下语法: ALTER TABLE table_name ADD CONSTRAINT...
    99+
    2024-04-09
    oracle
  • oracle怎么查看主键约束
    在Oracle数据库中,可以通过以下方式查看主键约束: 使用DESCRIBE命令:可以使用DESCRIBE命令来查看表结构,包括...
    99+
    2024-04-09
    oracle
  • MySQL主键约束和外键约束怎么设置
    这篇“MySQL主键约束和外键约束怎么设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“M...
    99+
    2023-03-13
    mysql
  • oracle怎么给表添加主键约束
    可以使用ALTER TABLE语句来给表添加主键约束。具体的语法如下:```ALTER TABLE table_nameADD CO...
    99+
    2023-09-28
    oracle
  • SQL Server主键约束(PRIMARY KEY)
    目录SQL Server PRIMARY KEY(主键)约束简介SQL Server PRIMARY KEY约束示例SQL Server PRIMARY KEY(主键)约束简介 主键...
    99+
    2024-04-02
  • mysql中主键约束和唯一约束的区别
    mysql 中主键约束和唯一约束的区别在于:主键最多包含多个列,不允许空或重复值,标识每条记录,可作为外键;唯一约束可包含任意列数,允许空值但不允许重复值,防止特定列组合重复。 MyS...
    99+
    2024-04-26
    mysql
  • 浅谈MYSQL主键约束和唯一约束的区别
    目录主键约束唯一约束主键约束 PRIMARY KRY 主键 是唯一的 一张表只能有一个主键 AUTO_INCREMENT 一定要和主键连用 主键一定是非空的 NOT NULL 特点...
    99+
    2024-04-02
  • sql主键约束和唯一约束有什么区别
    主键约束和唯一约束在功能上有一些区别。主键约束:- 主键约束用于定义一个表中的一列或一组列作为主键,用于唯一标识表中的每一行数据。-...
    99+
    2023-10-11
    sql
  • mysql主键约束如何写
    在MySQL中,主键约束可以通过以下方式来定义: 在创建表的时候,可以在字段定义后面使用PRIMARY KEY关键字来定义主键,例...
    99+
    2024-04-22
    mysql
  • sqlserver怎么删除主键约束
    要删除主键约束,可以使用ALTER TABLE语句并指定DROP CONSTRAINT关键字来删除主键约束。 例如,要删除名为PK_...
    99+
    2024-04-09
    SQLServer
  • mysql怎么删除主键约束
    要删除主键约束,可以使用ALTER TABLE语句并指定DROP PRIMARY KEY关键字。具体步骤如下: 首先,连接到MyS...
    99+
    2024-03-02
    mysql
  • db2怎么删除主键约束
    要删除一个表中的主键约束,可以使用ALTER TABLE语句,具体步骤如下: 使用以下语法来删除主键约束: ALTER TABL...
    99+
    2024-03-04
    db2
  • mysql如何添加主键约束
    在MySQL中,可以使用`ALTER TABLE`语句来添加主键约束。假设有一个名为`table_name`的表,需要给其添加名为`...
    99+
    2023-08-30
    mysql
  • mysql中主键约束怎么写
    mysql中的主键约束是一种唯一约束,用于明确定义表中每行的唯一标识符。可以通过使用primary key关键字或在创建表时指定来创建主键约束。主键可以是单列或复合列(由多个列组成),还...
    99+
    2024-04-26
    mysql
  • mysql主键约束如何使用
    在mysql中,主键约束用于唯一标识表中的每一行数据。在创建表时,可以为某一列指定主键约束,或者将多个列组合作为复合主键。 使用主键...
    99+
    2024-04-22
    mysql
  • oracle如何禁用外键约束
    要禁用Oracle数据库中的外键约束,可以使用以下两种方法:方法一:使用ALTER TABLE语句1. 使用sys用户或具有ALTE...
    99+
    2023-09-01
    oracle
  • SQL Server主键约束怎么创建
    这篇“SQL Server主键约束怎么创建”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作