MySQL两表关联:更新字段为另一表ID并添加外键的方法求助
解决MySQL表更新与外键关联问题
一、正确更新id_cnic字段值
你之前的UPDATE语句错误在于赋值部分使用了固定字符串'[value-3]',且WHERE子查询的逻辑无法正确关联并赋值。可以使用MySQL的多表UPDATE语法,通过CNIC字段关联两张表完成更新:
UPDATE mobiles_sim_details m JOIN id_details_table i ON m.CNIC = i.CNIC SET m.id_cnic = i.ID;
这条语句会将mobiles_sim_details表中每条记录的id_cnic,更新为id_details_table中对应相同CNIC的ID值。
二、添加外键关联
添加外键前需满足两个必要条件:
id_details_table的ID字段必须是主键或带有唯一索引(外键必须关联具备唯一约束的字段)。若还未设置主键,先执行:
ALTER TABLE id_details_table ADD PRIMARY KEY (ID);
mobiles_sim_details表中id_cnic字段的所有非NULL值,必须都存在于id_details_table的ID字段中(否则外键创建会失败)。
满足条件后,执行以下语句创建外键:
ALTER TABLE mobiles_sim_details ADD CONSTRAINT fk_mobiles_id_cnic FOREIGN KEY (id_cnic) REFERENCES id_details_table(ID);
补充说明
如果mobiles_sim_details存在CNIC在id_details_table中无匹配的记录,执行UPDATE后这些记录的id_cnic会保持NULL。若要排查这类数据,可执行:
SELECT * FROM mobiles_sim_details m LEFT JOIN id_details_table i ON m.CNIC = i.CNIC WHERE i.ID IS NULL;
内容的提问来源于stack exchange,提问作者Sohail Karim
相关产品推荐
相关产品推荐

