¿Hay alguna manera de obtener el nombre del campo de clave principal de mysql-database? Por ejemplo:
Tengo una mesa como esta:
+----+------+
| id | name |
+----+------+
| 1 | Foo1 |
| 2 | Foo2 |
| 3 | Foo3 |
+----+------+
Donde la identificación del campo es la clave principal (tiene incremento automático pero no puedo usar eso). ¿Cómo puedo recuperar el nombre de los campos "id" en php?
php
mysql
primary-key
Martti Laine
fuente
fuente
column_name
clave?cut
si desea obtener solo el nombre de la columna: `| cut -f5`Aquí está el nombre de la columna de clave principal
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';
fuente
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
fuente
constraint_name
se ve comoUK_entity_name
,PK_Users
,FK_Users_Contacts
etc., por lo que no parece que pueda ser de confianza para tener un valor independiente de la plataforma conocida. 😞utilizar:
show columns from tablename where `Key` = "PRI";
fuente
Qué tal esto:
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';
fuente
db
por su TABLE_SCHEMA ...? No entiendo por qué obtuviste +1 en esto ...Si desea generar la lista de claves primarias dinámicamente a través de PHP de una vez sin tener que ejecutar cada tabla, puede usar
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.key_column_usage WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY'
aunque es necesario tener acceso a information.schema para hacer esto.
fuente
Para un enfoque de PHP, puede usar 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";
fuente
El código más corto posible parece ser algo así como
// $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'];
fuente
¡Lo tengo, finalmente!
<?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); } } ?>
fuente
Yo utilizo SHOW INDEX FROM table; me da mucha información; si la clave es única, su secuencia en el índice, la colación, la subparte, si es nula, su tipo y comentario si existe, vea la captura de pantalla aquí
fuente
MySQL tiene una consulta SQL "SHOW INDEX FROM" que devuelve los índices de una tabla. Por ej. - la siguiente consulta mostrará todos los índices de la tabla de productos: -
SHOW INDEXES FROM products \G
Devuelve una tabla con tipo, column_name, Key_name, etc. y muestra la salida con todos los índices y claves primarias como -
*************************** 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:
Para mostrar la clave principal de la tabla, use: -
SHOW INDEXES FROM table_name WHERE Key_name = 'PRIMARY'
fuente
Si tiene tablas espaciales en su base de datos, use:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' OR Key_name = 'OGR_FID'
fuente
Debe utilizar PRIMARY de
key_column_usage.constraint_name = "PRIMARY"
consulta de muestra,
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";
fuente
SELECT k.column_name FROM information_schema.key_column_usage k WHERE k.table_name = 'YOUR TABLE NAME' AND k.constraint_name LIKE 'pk%'
Te recomiendo que mires todos los campos
fuente