【问题标题】:How to get the primary key "column name" of a specific table in MySQL如何在 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@),我要找的查询很简单,和我刚才给出的例子差不多。

谢谢

【问题讨论】:

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

标签: php mysql


【解决方案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,它是一样的,返回空'
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 2011-04-16
  • 2013-05-15
相关资源
最近更新 更多