php - 管理外键

标签 php mysql database

所以我有一个包含几张表的数据库。

第一个表包含用户 ID、名字和姓氏。

第二个表包含用户 ID、兴趣 ID 和利率。

还有另一个包含所有兴趣 ID 的表格。

对于每个兴趣 ID(即使添加了新的),我需要确保每个用户都有该兴趣 ID 的条目(即使它是空白的,或者有默认值)。

外键对这种情况有帮助吗?还是在添加新 key 时需要使用 PHP 来更新每条记录?

最佳答案

外键是一种约束,因此它们只会在您尝试添加记录时失败

您可以使用触发器完成您所描述的内容。我不知道 MySql 语法,但在 SQL Server 中它看起来像这样:

CREATE TRIGGER TR_ensure_user_interest ON interest FOR INSERT, UPDATE AS
BEGIN
    INSERT user_interest (user_id, interest_id)
    SELECT user_id, interest_id
      FROM inserted
          ,user
    EXCEPT (SELECT user_id, interest_id)
END

请注意,这是一种相当低效的方法,但它应该涵盖您关心的许多情况。

更新:我同意其他在这里观察到设计“味道”的人的观点。如果您可以使用 JOIN 查询完成所需的结果,那将是一个更有效的解决方案。但是,我试图回答实际提出的问题。 (另外,我遇​​到过这种情况,物理记录对不擅长复合查询的其他数据库用户很有帮助。)

关于php - 管理外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579249/

相关文章:

javascript - 使用 JavaScript 更改 PHP 包含的文件的 CSS

php - MySQL IN 语句的 PDO 绑定(bind)值

php - 如何验证存储在多个字段中的公司/客户列出的电子邮件?

php - 如何分析带有时间戳的条目的事件/频率?

php - 如何存储/关联每个模型的用户特定数据(状态?)

php - 在 PHP (LAMP) 中创建文档(PDF、DOC、XLS 等)的缩略图预览

mysql - 'NoneType' 对象没有属性 'cursor'

php/mysql 搜索多个值

database - 是否可以自定义keycloak使用的user_entity表?

database - 如何在其各自的 Byte[] 数组属性中将 2 个图像文件上传到 MVC C#5 数据库中?