Gibt es eine Möglichkeit, den Namen des Primärschlüsselfelds aus der MySQL-Datenbank abzurufen? Zum Beispiel:
Ich habe einen Tisch wie diesen:
+----+------+
| id | name |
+----+------+
| 1 | Foo1 |
| 2 | Foo2 |
| 3 | Foo3 |
+----+------+
Wo die Feld-ID der Primärschlüssel ist (sie hat eine automatische Inkrementierung, aber ich kann das nicht verwenden). Wie kann ich den Feldnamen "id" in PHP abrufen?
php
mysql
primary-key
Martti Laine
quelle
quelle
column_name
Schlüssel abzurufen ?cut
Sie diese Option, wenn Sie nur den Spaltennamen erhalten möchten: `| cut -f5`Hier ist der Spaltenname des Primärschlüssels
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';
quelle
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
quelle
constraint_name
sieht aus wieUK_entity_name
,PK_Users
,FK_Users_Contacts
usw., so dass es scheint nicht vertraut werden kann , einen bekannten Plattform-Agnostiker Wert zu haben. 😞verwenden:
show columns from tablename where `Key` = "PRI";
quelle
Wie wäre es damit:
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';
quelle
db
durch dein TABLE_SCHEMA ...? Ich verstehe nicht, warum du +1 dafür bekommen hast ...Wenn Sie die Liste der Primärschlüssel dynamisch über PHP auf einmal generieren möchten, ohne jede Tabelle durchlaufen zu müssen, die Sie verwenden können
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.key_column_usage WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY'
Sie müssen jedoch Zugriff auf das information.schema haben, um dies zu tun.
quelle
Für einen PHP-Ansatz können Sie mysql_field_flags verwenden
$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";
quelle
Der kürzestmögliche Code scheint so etwas wie zu sein
// $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'];
quelle
Ich habe es endlich!
<?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); } } ?>
quelle
Ich benutze SHOW INDEX FROM Tabelle; es gibt mir viele Informationen; Wenn der Schlüssel eindeutig ist, seine Reihenfolge im Index, die Sortierung, der Unterteil, falls null, sein Typ und sein Kommentar, falls vorhanden, siehe Screenshot hier
quelle
MySQL hat eine SQL-Abfrage "SHOW INDEX FROM", die die Indizes aus einer Tabelle zurückgibt. Zum Beispiel. - Die folgende Abfrage zeigt alle Indizes für die Produkttabelle an: -
SHOW INDEXES FROM products \G
Es gibt eine Tabelle mit Typ, Spaltenname, Schlüsselname usw. zurück und zeigt die Ausgabe mit allen Indizes und Primärschlüsseln als - an
*************************** 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:
Um nur den Primärschlüssel aus der Tabelle anzuzeigen, verwenden Sie: -
SHOW INDEXES FROM table_name WHERE Key_name = 'PRIMARY'
quelle
Wenn Ihre Datenbank räumliche Tabellen enthält, verwenden Sie:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' OR Key_name = 'OGR_FID'
quelle
Sie sollten PRIMARY von verwenden
key_column_usage.constraint_name = "PRIMARY"
Beispielabfrage,
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";
quelle
SELECT k.column_name FROM information_schema.key_column_usage k WHERE k.table_name = 'YOUR TABLE NAME' AND k.constraint_name LIKE 'pk%'
Ich würde Ihnen empfehlen, alle Felder zu beobachten
quelle