una tabla primaria obtener llave eliminar definir declarar crear como clave php mysql primary-key

php - tabla - eliminar clave primaria sql server



¿Cómo obtener la clave primaria de la mesa? (12)

¿Hay alguna forma 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?


¡Lo tengo, por fin!

<?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); } } ?>


Aquí está la clave principal Nombre de columna

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


El código más corto posible parece ser algo 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''];


MySQL tiene una consulta SQL "MOSTRAR ÍNDICE DE" que devuelve los índices de una tabla. Por ejemplo. - 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 el resultado 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 solo la clave principal de la tabla, use:

SHOW INDEXES FROM table_name WHERE Key_name = ''PRIMARY''


Para un enfoque de PHP, puede utilizar 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";


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


Si desea generar la lista de claves primarias dinámicamente a través de php de una sola 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 al information.schema para hacer esto.


Si tiene tablas espaciales en su base de datos, use:

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


Una mejor manera es usar SHOW KEYS ya que no siempre tiene acceso a la información del esquema. Los siguientes trabajos:

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

Column_name contendrá el nombre de la clave principal.


Yo uso SHOW INDEX FROM tabla; me da mucha información; si la clave es única, su secuencia en el índice, la intercalación, la subparte, si es nula, su tipo y el comentario, si existe, vea la captura de pantalla aquí


utilizar:

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


SELECT key_column_usage.column_name FROM information_schema.key_column_usage WHERE table_schema = schema() -- only look in the current db AND constraint_name = ''PRIMARY'' -- always ''PRIMARY'' for PRIMARY KEY constraints AND table_name = ''<your-table-name>'' -- specify your table.