如何获取表的主键?

Mar*_*ine 67 php mysql primary-key

有没有办法从mysql-database获取主键字段的名称?例如:

我有这样一张桌子:

+----+------+
| id | name |
+----+------+
| 1  | Foo1 |
| 2  | Foo2 |
| 3  | Foo3 |
+----+------+
Run Code Online (Sandbox Code Playgroud)

字段id是主键(它有自动增量但我不能使用它).如何在php中检索字段名称"id"?

ale*_*exn 113

更好的方法是使用,SHOW KEYS因为您并不总是可以访问information_schema.以下作品:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)

Column_name将包含主键的名称.

  • 有没有办法只检索`column_name`键? (25认同)

Sve*_*lov 31

这是主键列名

SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
  AND t.table_schema='YourDatabase'
  AND t.table_name='YourTable';
Run Code Online (Sandbox Code Playgroud)

  • 是的-这是一种方式。在MySQL的情况下,您甚至可以简化此操作,因为constraint_name始终为`PRIMARY`。 (3认同)
  • 但是这个解决方案在处理多个表时效果很好.(只需选择k.table_name,k.column_name,k.ordinal_position). (2认同)

Rol*_*man 16

SELECT key_column_usage.column_name
FROM   information_schema.key_column_usage
WHERE  table_schema = schema()             -- only look in the current db
AND    constraint_name = 'PRIMARY'         -- always 'PRIMARY' for PRIMARY KEY constraints
AND    table_name = '<your-table-name>'    -- specify your table.
Run Code Online (Sandbox Code Playgroud)


Afr*_*roz 7

这个怎么样.

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Your Database'
   AND TABLE_NAME = 'Your Table name'
   AND COLUMN_KEY = 'PRI';


SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Your Database'
   AND TABLE_NAME = 'Your Table name'
   AND COLUMN_KEY = 'UNI';
Run Code Online (Sandbox Code Playgroud)


v1r*_*s32 5

使用:

show columns from tablename where `Key` = "PRI";
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您想一次性通过 PHP 动态生成主键列表,而无需遍历您可以使用的每个表

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.key_column_usage 
WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY' 
Run Code Online (Sandbox Code Playgroud)

尽管您确实需要访问 information.schema 才能执行此操作。