[php] 테이블의 기본 키를 얻는 방법은 무엇입니까?

mysql-database에서 기본 키 필드의 이름을 얻는 방법이 있습니까? 예를 들면 :

다음과 같은 테이블이 있습니다.

+----+------+
| id | name |
+----+------+
| 1  | Foo1 |
| 2  | Foo2 |
| 3  | Foo3 |
+----+------+

필드 ID가 기본 키인 경우 (자동 증가가 있지만 사용할 수 없습니다). PHP에서 필드 이름 “id”를 어떻게 검색 할 수 있습니까?



답변

더 좋은 방법은 SHOW KEYSinformation_schema에 항상 액세스 할 수있는 것은 아니기 때문에 사용하는 것입니다 . 다음 작업 :

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

Column_name에는 기본 키의 이름이 포함됩니다.


답변

다음은 기본 키 열 이름입니다.

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';


답변

SELECT kcu.column_name, kcu.ordinal_position
FROM   information_schema.table_constraints tc
INNER JOIN information_schema.key_column_usage kcu
ON     tc.CONSTRAINT_CATALOG = kcu.CONSTRAINT_CATALOG
AND    tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA
AND    tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
WHERE  tc.table_schema = schema()             -- only look in the current schema
AND    tc.constraint_type = 'PRIMARY KEY'
AND    tc.table_name = '<your-table-name>'    -- specify your table.
ORDER BY kcu.ordinal_position


답변

사용하다:

show columns from tablename where `Key` = "PRI";


답변

이것은 어떤가요:

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';


답변

각 테이블을 실행할 필요없이 PHP를 통해 동적으로 기본 키 목록을 생성하려면 다음을 사용할 수 있습니다.

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.key_column_usage
WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY'

이렇게하려면 information.schema에 대한 액세스 권한이 있어야합니다.


답변

PHP 접근 방식의 경우 mysql_field_flags 를 사용할 수 있습니다.

$q = mysql_query('select * from table limit 1');

for($i = 0; $i < mysql_num_fields(); $i++)
    if(strpos(mysql_field_tags($q, $i), 'primary_key') !== false)
        echo mysql_field_name($q, $i)." is a primary key\n";