Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 外键级联更新是否传播所有可能的列?_Mysql_Sql_Database_Foreign Keys_Foreign Key Relationship - Fatal编程技术网

Mysql 外键级联更新是否传播所有可能的列?

Mysql 外键级联更新是否传播所有可能的列?,mysql,sql,database,foreign-keys,foreign-key-relationship,Mysql,Sql,Database,Foreign Keys,Foreign Key Relationship,我找不到任何合适的解释,因此: 我有表格A和表格B。 tableA包含字段column1、column2、column3。 tableB包含字段columnA、column1、columnC、columnD、columnE 表a中的列1是一个主键column1是一个外键,它引用了table a中的column1column1有一个更新级联约束 那么我的问题是。。如果我更改表A中每个字段的值,那么表B是否也会在其字段中获得相同的值?不可能,它只会更新表B中的外键。MySQL中的约束只更新相关列 那

我找不到任何合适的解释,因此:

我有
表格A
表格B
tableA
包含字段
column1、column2、column3
tableB
包含字段
columnA、column1、columnC、columnD、columnE

表a中的
列1
是一个主键<
table B中的code>column1
是一个外键,它引用了
table a中的
column1
<
表B中的code>column1
有一个
更新级联约束


那么我的问题是。。如果我更改
表A
中每个字段的值,那么
表B
是否也会在其字段中获得相同的值?

不可能,它只会更新表B中的外键。MySQL中的约束只更新相关列

那么触发器是更新相应列的唯一方法吗?在这种情况下,外键对于移动数据是无用的。他们只是维护完整性?没错,约束只是为了维护完整性。如果要更新其他列,可以尝试使用触发器;但是你应该考虑数据库中的重复信息。如果我有一个外键关系但没有约束,我仍然能够删除或更新另一个表引用的表中的行而不破坏引用表吗?引用表的外键列中是否有空值的行?或引用表中不再存在的值?如果没有约束,用外键关联两个数据相同的表有什么意义?将数据存储一次。如果您需要从没有它的表中获取它,请使用外键连接。像这样对数据进行非规范化通常是一个非常糟糕的主意,只会导致类似这样的问题。一个用途是日志表,它将一个正在运行的记录列表插入到另一个表中。但根据定义,日志表永远不应该更新。这是一根圆木。因此,问题和概念依然存在。如果您正在记录事件,那么在进行更改时应该向日志中插入新行。如果没有任何行提供给日志表,日志表将如何接收任何行?输入触发器。这是一个与您所问完全不同的问题。在insert上,可以使用insert触发器插入日志行。在更新时,不应触摸日志行,因为这会改变历史,使历史数据在技术上是错误的。您可以在更新时插入另一行以记录更改,但更改原始日志条目通常不是正确的答案。