联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。
可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,那么这时单独使用订单号就不可以了,因为会有重复。那么你可以再使用个订单序列号bill_seq来作为区别。把bill_no和bill_seq设成联合主键。即使bill_no相同,bill_seq不同也是可以的。
主键可以是属性或属性组。有时候必须多个属性组成的属性组作为主键才能唯一标识每个元组。有时候也只有联合主键才更符合实际情况。联合主键一般用在多对多联系上。例如大学的选课系统。每个学生可以选修多门课程,每门课程可以有多名学生选修。每个学生选修的每门课程有一个分数。那么现在建立“选课”这个表,有学生学号、课程号、分数3个属性。那么需要设学号和课程号为联合主键。因为单靠学号或单靠课程号都无法唯一标示一个元组(因为每个学生可以选修多门课程,每门课程可以有多名学生选修)。
每一字段可以有重复的,但是三个在一起不能有重复的,这就是联合主键
数据库里不让两条数据完全一样 直接手动操作数据库也不让出现两条一样的
比如有A,B,C3个字段 A B C 1 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
数据不能重复的语句
将三个字段连接起来作为主键,进行数据是否重复的判断。这里值得注意的是某列的值可能为空,所以要赋一个空字符串过去。
然后将不重复的值,插入新表就可以了。