联合主键

联合主键就是用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

数据不能重复的语句

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值