programing

테이블의 기본 키를 얻는 방법

yoursource 2022. 10. 3. 22:48
반응형

테이블의 기본 키를 얻는 방법

mysql-database에서 primary key 필드의 이름을 얻을 수 있는 방법이 있나요?예를 들어 다음과 같습니다.

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

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

여기서 필드 ID는 프라이머리 키입니다(자동 증분이지만 사용할 수 없습니다).php에서 필드 이름 "id"를 검색하려면 어떻게 해야 합니까?

더 좋은 방법은SHOW KEYS항상 information_information_information에 액세스할 수 있는 것은 아니기 때문입니다.다음과 같은 기능이 있습니다.

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' 

정보에 접근할 수 있어야 하지만요schema를 사용합니다.

가능한 최단 코드는 다음과 같습니다.

// $dblink contain database login details 
// $tblName the current table name 
$r = mysqli_fetch_assoc(mysqli_query($dblink, "SHOW KEYS FROM $tblName WHERE Key_name = 'PRIMARY'")); 
$iColName = $r['Column_name']; 

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

드디어 찾았어!

<?php

function mysql_get_prim_key($table){
    $sql = "SHOW INDEX FROM $table WHERE Key_name = 'PRIMARY'";
    $gp = mysql_query($sql);
    $cgp = mysql_num_rows($gp);

    if ($cgp > 0) {
        // Note I'm not using a while loop because I never use more than one prim key column
        $agp = mysql_fetch_array($gp);
        extract($agp);
        
        return($Column_name);
    } else {
        return(false);
    }
}

?>

저는 SHOW INDEX FROM 테이블을 사용합니다.키가 고유할 경우 인덱스의 시퀀스, 대조, 하위 부분, null의 경우 유형 및 코멘트(존재하는 경우)는 여기를 참조하십시오. 스크린샷을 참조하십시오.여기서

MySQL에는 테이블에서 인덱스를 반환하는 SQL 쿼리 "SHOW INDEX FROM"이 있습니다.예: - 다음 쿼리는 제품 테이블의 모든 인덱스를 표시합니다.-

SHOW INDEXES FROM products \G

column_name, Key_name 등의 유형의 테이블을 반환하고 모든 인덱스와 기본 키를 포함하는 출력을 다음과 같이 표시합니다.

*************************** 1. row ***************************
        Table: products
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: product_id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 

테이블에서 프라이머리 키만 표시하려면 :- 를 사용합니다.

SHOW INDEXES FROM table_name WHERE Key_name = 'PRIMARY'

데이터베이스에 공간 테이블이 있는 경우 다음을 사용합니다.

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' OR Key_name = 'OGR_FID'

Primary를 사용해야 합니다.key_column_usage.constraint_name = "PRIMARY"

샘플 쿼리,

SELECT k.column_name as PK, concat(tbl.TABLE_SCHEMA, '.`', tbl.TABLE_NAME, '`') as TABLE_NAME
FROM information_schema.TABLES tbl
JOIN information_schema.key_column_usage k on k.table_name = tbl.table_name
WHERE k.constraint_name='PRIMARY'
  AND tbl.table_schema='MYDB'
  AND tbl.table_type="BASE TABLE";
SELECT k.column_name
FROM information_schema.key_column_usage k   
WHERE k.table_name = 'YOUR TABLE NAME' AND k.constraint_name LIKE 'pk%'

모든 필드를 관람하시길 권합니다.

언급URL : https://stackoverflow.com/questions/2341278/how-to-get-primary-key-of-table

반응형