六. 多主键时,更新主键的问题
前面老蝴蝶讲过, 在单条记录时,更新主键 id 会报错, 即 二.三.二 的内容。
但如果是联合主键时, 更新主键时,会怎么样呢?
如创建一个表 user_status 时, 里面有 userId,termid,organ_code, status 四个属性。 其中, userId,termid,organ_code 是联合主键。 即三个联合主键, 一个普通字段。
六.一 创建表 user_status
create table user_status( userId int(11), termid varchar(20), organ_code varchar(10), status int(3), primary key(userId,termid,organ_code) );
六.二 插入数据
insert into user_status values(1,'2019-10','C1',1),(2,'2019-10','C1',1),(1,'2019-09','C1',1), (2,'2019-09','C1',1),(3,'2019-10','C2',2);
六.三 演示列不全都是主键时更新主键的情况
六.三.一 更新一个主键 (更新成功)
将第一条记录 1,‘2019-10’,‘C1’ 更新它的机构为 ‘C2’
update user_status set organ_code='C2' where userId=1 and termid='2019-10' and organ_code='C1';
六.三.二 更新两个主键 (更新成功)
将 1,‘2019-09’,‘C1’ 更新它的 期次和机构编号, 为’2019-11’,‘C3’
update user_status set termid='2019-11',organ_code='C3' where userId=1 and termid='2019-09' and organ_code='C1';
六.三.三 更新三个主键,即全部更新主键 (更新成功)
将 2,‘2019-09’,‘C1’ 更新它的 员工编号,期次和机构编号, 为 5,‘2019-11’,‘C3’ .
update user_status set userId=5,termid='2019-11',organ_code='C3' where userId=2 and termid='2019-09' and organ_code='C1';
是全部都可以更新的,只要主键不与已经存在的重复即可。
六.四 演示列全都是主键时更新主键的情况
发现,上面 user_status 表, 还有一个status 字段不属于主键, 现在将这个字段删除掉呢, 将这个表变成 只有 userId,termid,organ_code 三个字段,并且三个字段都是主键的情况。
会发生什么呢?
删除列 status ,并重新查询数据
alter table user_status drop column status;
六.四.一 更新一个主键 (更新成功)
将 5,‘2019-11’,‘C3’ 那一条数据更新, 只更新机构编号为 ‘C2’
update user_status set organ_code='C2' where userId=5 and termid='2019-11' and organ_code='C3';
六.四.二 更新两个主键 (更新成功)
将 1,‘2019-10’,‘C2’ 那一条数据更新, 更新 机构编号为 ‘C3’,期次为 ‘2019-12’
update user_status set termid='2019-12',organ_code='C3' where userId=1 and termid='2019-10' and organ_code='C2';
六.四.三 更新三个主键,即全部更新主键
将 3,‘2019-10’,‘C2’ 那一条数据更新, 更新 员工编号为 6,期次为’2019-12’, 机构为 ‘C3’
update user_status set userId=6,termid='2019-12',organ_code='C3' where userId=3 and termid='2019-10' and organ_code='C2';
发现,也全部都是成功的,只要不与已经存在的数据相同即可。
谢谢!!!








