有两个表
主表
name age sex
表1
name 爱好 婚否
表2
name
表3
name
现在有个问题请教下 大家, 怎么实现 我修改[主表]的name的时候 其它表的name也自动修改了, 好像建立表间关系也不行
这样的表结构设计是有问题的,可以看一下数据库表结构设计的三范式和反三范式。
姓名放在第一个表中,其他表关联第一个表的id就好了。
如果你的表结构已经是这样的,可以用触发器实现。
关联SQL也能实现但是SQL语句会很混乱。
update 表1 a left join 表2 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关联不就好了啊
如果已经不可更改了,建议使用程序代码去同步
修改的时候插入进去
设置关联,多表联查