我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle主键及约束

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle主键及约束

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle主键及约束

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

下载Word文档

猜你喜欢

SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束

文章目录 约束约束介绍和分类非空约束唯一约束主键约束默认约束案例练习外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库中数据的正确性、有效性和完整性
2023-08-17

MySQL主键约束和外键约束详解

目录1、PRIMARY KEY2、FOREIGN KEY3、表的设计3.1 一对一3.2 一对多3.3 多对多1、PRIMARY KEY上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这俩的结合体,也成为主
2023-03-13

oracle如何创建主键约束

主键是唯一标识表中每一行的特殊列或列组合,它确保表中的记录都是独一无二的,可以通过以下步骤创建:使用 alter table 语句指定表名。添加 primary key 关键字后跟要指定为主键的列名。主键约束有助于确保数据唯一性、提高查询速
oracle如何创建主键约束
2024-06-13

oracle怎么添加主键约束

主键约束用于标识表格中每一行:定义唯一且非空的列为主键列。在创建表时使用 create table 语句添加主键约束,或使用 alter table 语句向现有表中添加主键约束。oracle 支持复合主键,其中多个列联合作为主键。主键约束可
oracle怎么添加主键约束
2024-05-21

oracle怎么创建主键约束

要在Oracle数据库中创建主键约束,可以使用以下语法:ALTER TABLE table_nameADD CONSTRAINT constraint_name PRIMARY KEY (column_name);其中,table_na
oracle怎么创建主键约束
2024-04-09

oracle怎么查看主键约束

在Oracle数据库中,可以通过以下方式查看主键约束:使用DESCRIBE命令:可以使用DESCRIBE命令来查看表结构,包括主键约束。例如,假设有一个表名为"employees",可以使用以下命令来查看该表的结构:DESCRIBE emp
oracle怎么查看主键约束
2024-04-09

MySQL主键约束和外键约束怎么设置

这篇“MySQL主键约束和外键约束怎么设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL主键约束和外键约束怎么设置
2023-03-13

oracle怎么给表添加主键约束

可以使用ALTER TABLE语句来给表添加主键约束。具体的语法如下:```ALTER TABLE table_nameADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2
2023-09-28

mysql删除主键约束

可以通过使用 alter table 语句删除 mysql 表中的主键约束,语法为 alter table table_name drop primary key; 删除主键约束前,须先删除任何外键约束;删除后,表中将不再有唯一性约束,重复
mysql删除主键约束
2024-08-02

数据库主键约束

mssql数据库的主键约束中,主键名查询:exec sp_pkeys '数据表名'修改主键名称的方法:--第一步,删除主键约束alter table 表名 drop constraint 主键名;--第二步,添加主键约束alter table 表名 add
2019-04-11

mysql中主键约束和唯一约束的区别

mysql 中主键约束和唯一约束的区别在于:主键最多包含多个列,不允许空或重复值,标识每条记录,可作为外键;唯一约束可包含任意列数,允许空值但不允许重复值,防止特定列组合重复。MySQL 中主键约束和唯一约束的区别主键约束和唯一约束是 M
mysql中主键约束和唯一约束的区别
2024-04-26

mysql主键约束如何写

在MySQL中,主键约束可以通过以下方式来定义:在创建表的时候,可以在字段定义后面使用PRIMARY KEY关键字来定义主键,例如:CREATE TABLE table_name (id INT NOT NULL,name VARCHAR(
mysql主键约束如何写
2024-04-22

sql主键约束和唯一约束有什么区别

主键约束和唯一约束在功能上有一些区别。主键约束:- 主键约束用于定义一个表中的一列或一组列作为主键,用于唯一标识表中的每一行数据。- 主键必须是唯一且非空的,每个表只能有一个主键。- 主键可以由一个或多个列组成,这种情况下被称为复合主键。-
2023-10-11

mysql中主键约束怎么写

mysql中的主键约束是一种唯一约束,用于明确定义表中每行的唯一标识符。可以通过使用primary key关键字或在创建表时指定来创建主键约束。主键可以是单列或复合列(由多个列组成),还支持自动递增主键,会在插入新行时自动生成唯一值。主键约
mysql中主键约束怎么写
2024-04-26

mysql怎么删除主键约束

要删除主键约束,可以使用ALTER TABLE语句并指定DROP PRIMARY KEY关键字。具体步骤如下:首先,连接到MySQL数据库。使用以下语法删除主键约束:ALTER TABLE table_name DROP PRIMARY
mysql怎么删除主键约束
2024-03-02

编程热搜

目录