MySQL:在不同表的两个字段中始终保持相同的值

MySQL:在不同表的两个字段中始终保持相同的值,mysql,Mysql,有没有办法在不同表的两个字段中始终保持相同的值?您可以使用此方法,以便在其中一个字段发生更改时,另一个字段将同步以匹配。通常最好不要将值存储两次。相反,您可以仅将值存储在其中一个表中,并且在查询时,可以通过外键将两个表连接在一起,以便您可以同时访问两个表中的值: SELECT table1.foo, table2.bar FROM table1 JOIN table2 ON table1.table2_id = table2.id 如果将该值存储两次,则称为非规范化。如果值因某种原因失去同步,

有没有办法在不同表的两个字段中始终保持相同的值?

您可以使用此方法,以便在其中一个字段发生更改时,另一个字段将同步以匹配。

通常最好不要将值存储两次。相反,您可以仅将值存储在其中一个表中,并且在查询时,可以通过外键将两个表连接在一起,以便您可以同时访问两个表中的值:

SELECT table1.foo, table2.bar
FROM table1
JOIN table2 ON table1.table2_id = table2.id
如果将该值存储两次,则称为非规范化。如果值因某种原因失去同步,这可能会导致问题。有时,反规范化以提高性能是有利的,但是单个连接非常快,因此除非您测量了性能并发现它太慢,否则我建议不要这样做

INSERT INTO TABLE A (FieldInA) VALUES ('X')
INSERT INTO TABLE B (FieldInB) VALUES ('X')

然后永远不要删除或更新这些表行,瞧,在不同表的两个字段中总是有相同的值。

有什么原因不能
规范化数据库的设计,这样就不会有相同的数据两次,也不必再担心类似的事情了


如果您无法更改设计,请查看

您为什么要这样做

如果一个实体的一个属性始终与另一个相关实体的某个属性相同,则您有一个冗余数据模型

与其尝试同步属性,不如参考一个属性。使用联接将第一个表联接到第二个表,然后从一个表中获取属性值。例如,如果您目前有:

 TableA.foo should always equal TableB.bar
删除TableA.foo列,然后执行以下操作:

 select A.*, B.bar as foo
 from TableA A 
 join TableB B on (B.foreign_key = A.key);

我的猜测是,保持相同的值是用户输入的自由格式文本或soemthing,但他可以有一个表,并通过ID引用新条目。您能否更具体地说明这个问题的性质以及为什么要这样做?“最佳”解决方案可能取决于它……不是我,但这是一场赌博。如果删除此答案,当重新计算rep时,您将获得rep。