sql 多表修改的一个问题

有两个表

主表

name age sex

表1
name 爱好 婚否

表2
name

表3
name

现在有个问题请教下 大家, 怎么实现 我修改[主表]的name的时候 其它表的name也自动修改了, 好像建立表间关系也不行

这样的表结构设计是有问题的,可以看一下数据库表结构设计的三范式和反三范式。
姓名放在第一个表中,其他表关联第一个表的id就好了。
如果你的表结构已经是这样的,可以用触发器实现。
关联SQL也能实现但是SQL语句会很混乱。


update1 a left join2 b on a.name=b.name  set a.name=b.name where  a.name=b.name

使用触发器就可以


update table1
set field1=(select top 1 field1 from table2 where table2.id=table1.id)
where table1.id in (condition)

多表连接的时候,给属性名赋值时候最好给表取个别名如:

update table1 t1 join table2 t2 set t1.name= ? where ......

连接的时候不把每个表的name分离开来,可能会产生表的粘连



真不推荐这么做,我个人觉得一张表就行了,如果一定要分开,那从表就外键关联主表,name只要主表有这个就行

可行做法
1、触发器,但不推荐用,影响性能
2、监控主表的name,当name修改时,再写代码去修改其他表的name
可以参考数据同步框架的canal的mysql间的表结构同步,通过读取binlog知道你的主表name改变了,该方法比较复杂
推荐做法
1、name存在主表里,其他表通过join的方式关联获取name信息
2、建立视图,视图里面关联表

这个设计有问题啊,name字段主表维护就行了啊,其他表通过ID关联不就好了啊
如果已经不可更改了,建议使用程序代码去同步

修改的时候插入进去

设置关联,多表联查