联合主键

来源:互联网 发布:求购网络路由器 编辑:程序博客网 时间:2024/05/17 03:09
联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。

可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,那么这时单独使用订单号就不可以了,因为会有重复。那么你可以再使用个订单序列号bill_seq来作为区别。把bill_no和bill_seq设成联合主键。即使bill_no相同,bill_seq不同也是可以的。

主键可以是属性或属性组。有时候必须多个属性组成的属性组作为主键才能唯一标识每个元组。有时候也只有联合主键才更符合实际情况。联合主键一般用在多对多联系上。例如大学的选课系统。每个学生可以选修多门课程,每门课程可以有多名学生选修。每个学生选修的每门课程有一个分数。那么现在建立“选课”这个表,有学生学号、课程号、分数3个属性。那么需要设学号和课程号为联合主键。因为单靠学号或单靠课程号都无法唯一标示一个元组(因为每个学生可以选修多门课程,每门课程可以有多名学生选修)。

每一字段可以有重复的,但是三个在一起不能有重复的,这就是联合主键

数据库里不让两条数据完全一样直接手动操作数据库也不让出现两条一样的

比如有A,B,C3个字段A    B    C1    1    1    √1    1    2    √1    2    1    √1    2    2    √2    1    1    √2    2    2    √

再往里插上边相同的记录就错比如1    1    1    ×

语法:alter table 表名 add constraint 主键别名(只是个别名) primary key (字段1, 字段2, 字段3);

alter table kk.kkbmqx  add constraint lhpk primary key (id, dw, bm);

触发器创建:

CREATE TRIGGER tr_fortoufa ON KKBMQX   FOR INSERT AS BEGIN   IF(EXISTS(SELECT 1 FROM KKBMQX WHERE ID = ( :NEW.ID) AND DW = ( :NEW.DW) AND BM =(:NEW.BM) ) )   THEN dbms_output.put_line('重复!!');   ELSE   INSERT INTO KKBMQX WHERE 。。。 END tr_fortoufa

数据不能重复的语句

将三个字段连接起来作为主键,进行数据是否重复的判断。这里值得注意的是某列的值可能为空,所以要赋一个空字符串过去。

然后将不重复的值,插入新表就可以了。

0 0