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

时间:2010-08-10 18:11:44

标签: mysql

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

5 个答案:

答案 0 :(得分:1)

您可以使用triggers,以便在其中一个字段发生变化时,另一个字段进行同步以匹配。

答案 1 :(得分:1)

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

SELECT table1.foo, table2.bar
FROM table1
JOIN table2 ON table1.table2_id = table2.id

如果将值存储两次,则称为非规范化。如果由于某种原因导致值不同步,则可能导致问题。有时,非规范化以提高性能是有利的,但单个连接速度非常快,因此,除非您已经测量了性能并发现它太慢,否则我建议不要这样做。

答案 2 :(得分:0)

为什么你不能normalize设计你的数据库以便你没有两次相同的数据并且不必再担心这样的东西了?

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

答案 3 :(得分:0)

你为什么要这样做?

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

不是尝试同步属性,而是引用到一个属性。使用连接将第一个表连接到第二个表,然后从一个表中获取属性的值。例如,如果你现在有这个:

 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);

答案 4 :(得分:-1)

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

然后简单地永远不会删除或更新这些表行,而且,在不同表的两个字段中,您总是具有相同的值。