键Oracle中主键和唯一键的区别与联系(oracle主键和唯一)
在关系型数据库中,主键(Primary Key)和唯一键(Unique Key)都能保证数据表中某个字段的唯一性,那么它们之间有什么区别和联系呢?
一、主键是一种特殊的唯一键
主键是一种唯一键,不同的是主键对应数据库表中的每行数据都必须有一个唯一键值且不允许为空。通常主键为表的一个字段,可以是单个字段或多个字段的组合。主键可以帮助我们快速地定位一条记录。
例如,以下是一条学生的信息记录:
学生ID 学生姓名 学生年龄 学生性别
1001 张三 18 男
若我们把学生ID设置为主键,这条记录中的学生ID必须是唯一的且不能为空,这样我们就能根据学生ID快速地定位特定的学生。
二、唯一键是一种可以容忍空值的唯一键
唯一键不能重复,但唯一键值可以为空。如果我们在某个字段设置了唯一键,那么该字段不能出现相同的值。和主键不同,唯一键不一定是表的一个字段,可以是多个字段的组合。
例如,以下是一条商品信息记录:
商品ID 商品名称 商品类别 商品价格
SC1001 iPhone8 手机 5999
若我们把商品名称和商品类别设置为唯一键,这条记录中的(iPhone8,手机)必须是唯一的,但是商品价格可以有多个相同的值。
三、主键和唯一键的联系
1. 主键和唯一键都可以保证数据表中某个字段的唯一性,从而避免数据重复插入。
2. 主键和唯一键都可以用作索引,帮助加快数据表的查询速度,提升数据库性能。
3. 虽然主键和唯一键并不要求唯一键值对应的字段为非空,但是为了能更有效地使用索引,最好还是把唯一键值设为非空。
四、主键和唯一键的区别
1. 主键不能重复且不能为空,而唯一键不能重复但唯一键值可以为空。
2. 一个表只能有一个主键,而可以有多个唯一键。
3. 主键可以用来建立外键约束(Foreign Key),唯一键不能。外键是规定了表之间的关系,从而建立起表之间的联系。
代码示例:
创建一张学生信息表,其中学生ID为主键,不能重复且不能为空,其他字段不限制重复。
CREATE TABLE student_info(
student_id VARCHAR2(20) NOT NULL,
student_name VARCHAR2(50),
student_age NUMBER(2),
student_sex VARCHAR2(4),
CONSTRNT pk_student_info PRIMARY KEY (student_id)
);
创建一张商品信息表,其中(商品名称,商品类别)为唯一键,不能重复,但字段可以为空,其他字段不限制重复。
CREATE TABLE commodity_info(
commodity_id VARCHAR2(20),
commodity_name VARCHAR2(50),
commodity_class VARCHAR2(20),
commodity_price NUMBER(10,2),
CONSTRNT unq_commodity_info UNIQUE (commodity_name,commodity_class)
);