如何在 MySQL 中获取特定表的主键“列名”

Posted

技术标签:

【中文标题】如何在 MySQL 中获取特定表的主键“列名”【英文标题】:How to get the primary key "column name" of a specific table in MySQL 【发布时间】:2019-02-16 16:25:25 【问题描述】:

我们的系统会为每个更新或插入新内容的表创建一个日志,它会保存表名、更新行的 ID 值或最后插入的 id 以及事件的时间戳

这很有用,因为我们可以检查最新更新的表是什么,并在发生更改后立即刷新向用户显示的信息,但我们没有在日志中保存 ID 的列名。

问题是我们在 php 中是逐个编程的。

if($tableName == 'Clients') $idname = 'CID'; 

有没有办法只问mysql:给我一个特定表的主键列名,比如:

SHOW COLUMN_NAME FROM CLEINTS WHERE KEY_NAME = 'PRIMARY KEY';

我记得我过去曾使用过这样的查询,但我不记得它是什么,我找到了一些 SQL 解决方案,但似乎在 MySQL 中不起作用或者太复杂(使用 @ 987654324@),我要找的查询很简单,和我刚才给出的例子差不多。

谢谢

【问题讨论】:

也许这有帮助:***.com/questions/5213339/… 关闭:SHOW INDEX FROM CLIENTS WHERE KEY_NAME = 'PRIMARY'; 不错,SHOW INDEX FROM... 很好,快到了!这会返回所有索引,包括 key_Name 'primary' 和列名,但它返回的信息太多,我只想要主键名。谢谢! 试试这个:SHOW KEYS FROM CLEINTS WHERE Key_name = 'PRIMARY' @Nick,如果您可以将其添加为回复,我可能会将其视为一个很好的答案,它非常接近且绝对有用 【参考方案1】:

您可以从information_schema 数据库中获取详细信息。使用以下查询:

SELECT COLUMN_NAME 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'Your_table_name' 
  AND CONSTRAINT_NAME = 'PRIMARY'

【讨论】:

这很好!这正是我想要的结果,也许 information_schema 毕竟是必需的,谢谢! 如果您认为该问题可能对其他用户有用,请为该问题投票。谢谢! @multimediaxp 不知何故,在我的情况下,特定表的相同列名 (PK) 是其三倍。我在这个解决方案中添加了一个 DISTINCT 子句。请接受编辑:) Madhur Bhaiya 怎么样???我们谈论的是MYSQL。每个表只有一个 PRIMARY 键,并且所有键必须具有唯一的名称。【参考方案2】:

你可以通过使用得到KEYS

SHOW KEYS FROM CLEINTS WHERE Key_name = 'PRIMARY'

另一种使用 SHOW 的方法来获得 INDEXES,就像评论中提到的 @nick 一样

SHOW INDEXES FROM CLEINTS WHERE Key_name = 'PRIMARY'

语法:

SHOW [EXTENDED] INDEX | INDEXES | KEYS
    FROM | IN tbl_name
    [FROM | IN db_name]
    [WHERE expr]

documentation link 了解更多详情。

【讨论】:

如果您认为有用,请对问题投赞成票。谢谢!【参考方案3】:

你好@multimediaxp 我想这可能对你有帮助。

SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'yourDBName')
  AND (`TABLE_NAME` = 'Clients')
  AND (`COLUMN_KEY` = 'PRI');

更多详情请查看给定链接: http://mysql-0v34c10ck.blogspot.com/2011/05/better-way-to-get-primary-key-columns.html

【讨论】:

我不想使用information_schema,它更多的形式是:SHOW KEYS FROM CLEINTS WHERE Key_name = 'PRIMARY',就像之前的cmets添加的那样。 顺便说一句,它看起来是一个不错的选择,但它返回一个空结果。 :( @multimediaxp 它对我有用。我相信您的客户表名中有错字 我检查过,写的都正确,COLUMN_KEY = 'PRI' 正确吗?我试过COLUMN_KEY = 'PRIMARY,它是一样的,返回空'

以上是关于如何在 MySQL 中获取特定表的主键“列名”的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?

获取列名包含大写字符的表的主键时,Jooq 的值无效

如何获取mysql数据库中某个表的主键或唯一字段

如何在 C# 中获取 Ms Access 表的主键

SQL查询查找表的主键?

开发技巧-如何获取表记录的主键