簡體   English   中英

如何獲取MySQL中foreignKey值相關數據的所有表

[英]How to get all tables with related data for foreignKey value in MySQL

我確實有很多桌子。 在每個表中都有一個 user_id 作為 foreign_key 指向 user.id(用戶表,主鍵)。 這是為了記錄哪個用戶插入/更改了數據。

現在我想知道用戶在哪些表中插入了數據。

有沒有加入所有表格的簡單技巧?

  • 我不期望數據(可以稍后查詢)
  • 我不需要知道foreign_key指向用戶表的哪些表(我已經知道了)
  • 我想知道用戶數據在哪里相關

我可以加入所有表格,但這將是一個巨大的性能問題。 有很多桌子,有些也很大。

我正在尋找類似的東西:

SELECT tablename 
FROM information_schema.foo 
WHERE foreign_key = "key_name" AND foreign_key_value = 2;

我認為沒有任何直接的方法,但您可以使用information_schema.key_column_usage為您構建查詢。

SELECT 
  concat('select \'',TABLE_NAME,
  '\' as `in_table`, IF (',COLUMN_NAME,' IS NOT NULL, \'Present\', \'Absent\') as exist from ',
 TABLE_NAME, ' where ', COLUMN_NAME, ' = 2; ') as `query`
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = 'testdb' AND
  REFERENCED_TABLE_NAME = 'users';

現在您有了上面的查詢,它將為user-id = 2的每個表返回查詢。 您可以創建一個以用戶 ID 作為參數的過程,然后執行上述查詢。

遍歷結果,例如:

select 'employees' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from employees where user_id = 2; 
select 'profile_documents' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from profile_documents where user_id = 2; 

並一一執行。

然后使用該過程返回存在用戶信息的表的名稱。

您可以查詢系統視圖INFORMATION_SCHEMA.KEY_COLUMN_USAGE

select
  table_name,
  column_name,
  constraint_name,
  referenced_table_name,
  referenced_column_name
from information_schema.key_column_usage
where
    referenced_table_name = 'user'
    and referenced_column_name = 'user_id'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM