Oracle primary key和unique key的区别与联系

 

primarykey与uniquekey都是唯一性约束,用来限制相同字段的值插入。但二者有很大的区别:

1.作为primarykey的1个或多个列必须为NOTNULL,
如果建表时此列设为NULL,在增加PRIMARYKEY时,列自动更改为NOTNULL。
而uniquekey约束的列可以为null,这是primarykey与uniquekey最大的区别。
2.一个表只能有一个primarykey(单列或多列,多列主键叫联合主键),但可以有多个uniquekey。
实例1:
createtablet(c1number(2),c2date,c3varchar2(5),c4int);
desct;
NameTypeNullableDefaultComments
————————————–
C1NUMBER(2)Y
C2DATEY
C3VARCHAR2(5)Y
C4INTEGERY
//
实例2:添加primarykey
altertabletaddconstraintt_pkprimarykey(c1,c2);
desct;
NameTypeNullableDefaultComments
————————————–
C1NUMBER(2)
C2DATE
C3VARCHAR2(5)Y
C4INTEGERY
我们看到,将c1,c2列设为联合主键后,他们变为notnull;
如果在建表时就指定了主键的话,主键列将会默认为notnull。
//
如果我们在添加一个primarykey,那么我们将会得到一个错误:
altertabletaddconstraintt_pk_2primarykey(c3,c4)
ORA-02260:tablecanhaveonlyoneprimarykey
//
实例3:添加uniquekey
altertabletaddconstraintunique_key_tunique(c3,c4);
实例4:添加数据
insertintot(c1,c2,c3,c4)
values(10,sysdate,’abc’,3);
1rowinserted
//
insertintot(c1,c2,c3,c4)
values(11,sysdate,’abc’,3);
ORA-00001:uniqueconstraint(SCOTT.UNIQUE_KEY_T)violated
我们看到,添加的第二条数据违反了刚刚创建的唯一键约束;
将unique_key_t删除,添加就能成功了。
实例5:删除uniquekey
altertabletdropconstraintunique_key_t;
insertintot(c1,c2,c3,c4)
values(11,sysdate,’abc’,3);
1rowinserted
//
实例6:删除primarykey
altertabletdropconstraintt_pk;
Tablealtered
//
desct;
NameTypeNullableDefaultComments
————————————–
C1NUMBER(2)Y
C2DATEY
C3VARCHAR2(5)Y
C4INTEGERY
删除主键约束后,c1,c2列由恢复了原来的默认值null。
//
3.其实primarykey也是uniquekey,被primarykey约束的列notnull,并且不允许重复
实例7:
truncatetablet;
Tabletruncated
//
altertabletaddconstraintt_pkprimarykey(c1,c2);
Tablealtered
//
insertintot(c1,c2,c3,c4)
values(1,to_date(’2011-01-01′,’yyyy-mm-dd’),’csdn’,10);
1rowinserted
//
insertintot(c3,c4)
values(‘china’,1);
ORA-01400:cannotinsertNULLinto(“SCOTT”.”T”.”C1″)
//
insertintot(c1,c2,c3,c4)
values(1,to_date(’2011-01-01′,’yyyy-mm-dd’),’csdn’,10);
ORA-00001:uniqueconstraint(SCOTT.T_PK)violated
这里,我们看到primarykeyt_pk变成了unique约束,证明了主键约束也是唯一约束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主键(primary key)约束是一种用于唯一标识表每一行的约束。它确保表的每一行都具有唯一的标识符,并且不允许为空。主键约束可以由一个或多个列组成,这些列的值必须是唯一的。 外键(foreign key)约束用于建立表之间的关系。它定义了一个列或一组列,这些列的值必须与另一个表的主键或唯一键的值相匹配。外键约束可以确保数据的完整性,防止无效的引用和维护表之间的关联。 唯一性(unique)约束用于确保表的某一列或一组列的值是唯一的。唯一性约束可以防止重复的值出现在列,但允许空值。 检查(check)约束用于限制列的值必须满足指定的条件。检查约束可以是简单的比较运算符,也可以是复杂的表达式。它可以用于限制列的值的范围、数据类型或其他条件。 以下是一个示例,演示了如何在Oracle数据库创建主键约束、外键约束、唯一性约束和检查约束: 1. 创建主键约束: ```sql CREATE TABLE employees ( employee_id INT PRIMARY KEY, employee_name VARCHAR(50) ); ``` 2. 创建外键约束: ```sql CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); ``` 3. 创建唯一性约束: ```sql CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(50), product_code VARCHAR(10) UNIQUE ); ``` 4. 创建检查约束: ```sql CREATE TABLE students ( student_id INT PRIMARY KEY, student_name VARCHAR(50), age INT CHECK (age >= 18) ); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值