mysql-databaseから主キーフィールドの名前を取得する方法はありますか?例えば:
私はこのようなテーブルを持っています:
+----+------+
| id | name |
+----+------+
| 1 | Foo1 |
| 2 | Foo2 |
| 3 | Foo3 |
+----+------+
フィールドIDが主キーである場合(自動インクリメントがありますが、使用できません)。PHPでフィールド名「id」を取得するにはどうすればよいですか?
回答:
SHOW KEYS
information_schemaに常にアクセスできるとは限らないため、より良い方法を使用することです。次の作品:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
Column_nameには、主キーの名前が含まれます。
column_name
キーのみを取得する方法はありますか?
cut
列名だけを取得する場合に使用します: `| カット-f5`
主キーの列名は次のとおりです
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';
PRIMARY
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
constraint_name
のように見えるUK_entity_name
、PK_Users
、FK_Users_Contacts
など、それはよく知られているプラットフォームに依存しない値を持つように信頼することができていないようです。😞–
これはどう:
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';
db
TABLE_SCHEMAによる名前の変更はどうですか...?あなたがこの上で+1を得た私はなぜ...理解していない
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";
可能な最短のコードは次のようなもののようです
// $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
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 INDEXFROMテーブルを使用します; それは私にたくさんの情報を与えてくれます; キーが一意の場合、インデックス内のシーケンス、照合順序、サブパーツ、nullの場合、タイプとコメントが存在する場合は、こちらのスクリーンショットを参照してください
MySQLには、テーブルからインデックスを返すSQLクエリ「SHOWINDEXFROM」があります。例えば。-次のクエリは、productsテーブルのすべてのインデックスを表示します。-
SHOW INDEXES FROM products \G
type、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'
から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";