Mysql 也检查其他键的外键约束

Mysql 也检查其他键的外键约束,mysql,foreign-keys,constraints,Mysql,Foreign Keys,Constraints,我将MySQL用于多用户站点。我管理用户的方式是在每个表中都有一个UserId列,因此每当用户登录时,我都可以通过将用户ID存储在会话变量中并向每个查询添加WHERE UserId=?来假装存在的唯一数据是属于当前用户的数据 因为我想假设唯一存在的数据是当前用户的数据,所以外键检查也应该假设只有属于当前用户的行存在。例如,假设我有以下表格: 配方(Id、用户Id、名称) 成分(Id、用户Id、RecipeId、名称) 假设我有这些食谱: Id | UserId | Name 1 | 7

我将MySQL用于多用户站点。我管理用户的方式是在每个表中都有一个
UserId
列,因此每当用户登录时,我都可以通过将用户ID存储在会话变量中并向每个查询添加
WHERE UserId=?
来假装存在的唯一数据是属于当前用户的数据

因为我想假设唯一存在的数据是当前用户的数据,所以外键检查也应该假设只有属于当前用户的行存在。例如,假设我有以下表格:

  • 配方(Id、用户Id、名称)
  • 成分(Id、用户Id、RecipeId、名称)
假设我有这些食谱:

Id | UserId | Name
1  |   7    | "Carrot Cake"
2  |   8    | "Chicken Curry"
以下配料可以:

Id | UserId | RecipeId | Name
1  |   8    |    2     | "Chicken"
2  |   8    |    2     | "Curry"
但不是以下内容,因为用户7不拥有配方2:

Id | UserId | RecipeId | Name
1  |   7    |    2     | "Flour"
因此,我希望我的数据库就像只存在属于当前用户的行一样,这样插入具有属于另一个用户的配方的配料就像插入具有不存在的配方的配料,从而导致查询失败

有没有一种方法可以使用约束来实现这一点?我现在能想到的唯一解决方案是查询配方,并确保每个新成分都属于属于当前用户的配方,但我有引用多个其他表的表,这样做需要我为每个插入运行多个查询