mysql - SQL 中自动更新外键

标签 mysql sql database

我对关系数据库比较陌生,我不确定我想做的事情是否可行。如果有人可以告诉我如何做到这一点或至少指出我正确的方向,

我有这个table_1

NameId       SelectedName 
1                 A
3                 C
6                 F

NameIdREFERENCES table_2 (Id)

FOREIGN KEY

我有这个table_2

Id              Name 
1                A
2                B
3                C
4                D
5                E
6                F

我想设置我的数据库,以便每当更新 table_2 中的条目时,table_1 都会更改其Name 的值列(如果来自 table_2 的条目位于其中)。例如,如果我在 table_2

中更改此值
Id              Name 
3             C_EDITED

该更改也将反射(reflect)在table_1

最佳答案

您可能不想这样做......

这些表看起来没有标准化,因此如果您只是在 table_1 中重复 table_2 的值,则可能会出现数据冗余和完整性问题。因此,如果没有 SelectedName 列,table_1 可能会更好,因为您随时可以在需要时从 table_2 中查找 Name 的值,例如

SELECT t1.NameId, t2.Name
FROM table_1 t1 INNER JOIN table_2 t2 ON (t1.NameId = t2.Id); 

但是,如果我们假设 IdName 作为您的主键是必需的(即您有诸如 (1,'A'),(1 ,'B'),(1,'Anything') in table_2 那么 PK 将在两列上定义,就像引用该表的 FK 一样。此 SQLfiddle 显示了它如何工作,但它确实要求您更改 PK table_2table_1 上的 FK 并使用其他一些评论中提到的 ON UPDATE CASCADE 方法。

http://sqlfiddle.com/#!9/80daee/1

关于mysql - SQL 中自动更新外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932586/

相关文章:

mysql - 数据抓取/仓库应用程序的数据库设计建议?

php - 在 PHP 中以行/表格形式显示从 MySQL 检索的数据

MYSQL中型查询优化与子查询

mysql - SQL 查询执行速度更快 - 表之间没有关系 - 更快生成结果

Mysql:查找每周登录一次的活跃用户

stored-procedures - 为什么(以及何时)使用存储过程?

javascript - 将 json 数据从两个对象编辑为一个对象

mysql - 在交叉应用 SQL 中从最大值中选择属性

SQL Server : Finding Max Value in Result Set

一行多个case语句的SQL结果