Páginas: [1]
|
 |
|
Autor
|
Tema: selecionar una PK en MySQL? (Leído 119 veces)
|
|
el_macnifico
|
tengo un porblema con MySQL la cosa es que no se comando usar para que me devuelva la columna PK de una tabla X. esuve buescando documentacion en internet y la poca que encontre no me funciono ya que es para otras versiones de MySQL. estoy trabajando con MySQL 5.0
gracias
|
|
|
|
|
En línea
|
|
|
|
|
^TiFa^
|
No se que quieres realmente hacer... pero con un :
describe nombre-tabla;
Obtienes cual es la primary key de esa tabla en cuestion, ejemplo :
mysql> describe empleaditos; +-----------+--------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------------------+------+-----+---------+----------------+ | nombres | char(20) | YES | | NULL | | | apellidos | char(20) | YES | | NULL | | | codigo | int(6) unsigned zerofill | NO | PRI | NULL | auto_increment | +-----------+--------------------------+------+-----+---------+----------------+ 3 rows in set (0.61 sec)
mysql>
Donde mi primary key es (codigo) - lo puedes claramente ver con describe table. Donde dice KEY es la primary key, si en vez de PRI dice MUL es una llave tipo Unique, o Index. Otra forma de ver el PK de una tabla es ::
mysql> show indexes from empleados; +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_Comment | +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | empleados | 0 | PRIMARY | 1 | codigo | NULL | 2 | NULL | NULL | | BTREE | | | +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 1 row in set (0.00 sec)
mysql>
Me temo hazta lo que se que no existe en Mysql, en su tabla de diccionario information_schema, alguna tabla que haga referencia a todas las keys que tenga alguna tabla en cuestion, como es el caso de Oracle.
Aunque a lo mejor dentro de la base de datos information_schema, hay ciertas tablas que guardan referencias a las primary key existentes en toda la DB por ejemplo :
mysql> select constraint_name, constraint_catalog, constraint_schema, column_name from KEY_COLUMN_USAGE;
+-----------------+--------------------+-------------------+--------------------+ | constraint_name | constraint_catalog | constraint_schema | column_name | +-----------------+--------------------+-------------------+--------------------+ | PRIMARY | NULL | primaria | codigo | +-----------------+--------------------+-------------------+--------------------+
A lo mejor estas buscando esa tabla en si ......
Mas detalles, entra a la DB information_schema y :
mysql> describe KEY_COLUMN_USAGE; +-------------------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------------------+--------------+------+-----+---------+-------+ | CONSTRAINT_CATALOG | varchar(512) | YES | | NULL | | | CONSTRAINT_SCHEMA | varchar(64) | NO | | | | | CONSTRAINT_NAME | varchar(64) | NO | | | | | TABLE_CATALOG | varchar(512) | YES | | NULL | | | TABLE_SCHEMA | varchar(64) | NO | | | | | TABLE_NAME | varchar(64) | NO | | | | | COLUMN_NAME | varchar(64) | NO | | | | | ORDINAL_POSITION | bigint(10) | NO | | 0 | | | POSITION_IN_UNIQUE_CONSTRAINT | bigint(10) | YES | | NULL | | | REFERENCED_TABLE_SCHEMA | varchar(64) | YES | | NULL | | | REFERENCED_TABLE_NAME | varchar(64) | YES | | NULL | | | REFERENCED_COLUMN_NAME | varchar(64) | YES | | NULL | | +-------------------------------+--------------+------+-----+---------+-------+ 12 rows in set (0.00 sec)
Vas viendo que guarda tabla por tabla, a lo mejor encuentras lo que buscas.
|
|
|
|
« Última modificación: 20 Mayo 2008, 15:42 por ^TiFa^ »
|
En línea
|
|
|
|
|
el_macnifico
|
jeje gracias ,me ayudaste un monton.
lo que estoy haciendo es un metodo en c# para que obtener el ultimo registro de la PK de cualquer tabla.
para eso solo se tiene el nombre de la tabla.
otra pregunta, es aconsejable que la PK sea un entero autoincrementado?
|
|
|
|
|
En línea
|
|
|
|
|
^TiFa^
|
Hola nuevamente. Sobre si la PK es aconsejable que sea un entero autoincrementado, depende lo que estes o quieras hacer... Tu sabes que la PK por defecto NO accepta insercion de valores nulos, como el caso de sus companeras (Unique y Index). Por lo tanto como tu PK es una primary key jamas, jamas acceptara un valor nulo ni repetido. Usamos el Auto_increment por comodidad digase, asi si un usuario o hasta tu mismo quieres insertar data en una tabla, el ultimo valor o sea la columna que funciona como PK, puedes dejarla en blanco o nula, y si tienes autoincremento activado el automaticamente asignara el valor que sigue, ahora si tu no tienes autoincremento definido en una PK no puedes insertar o dejar ese valor nulo, porque el te exhigira un valor, si tu llave primaria fuese Unique o Index se insertase un valor nulo sin problema (lo cual no es recomendable) por eso al menos de mi parte siempre uso autoincremento, en las PK para evitar la molestia he incomodidad de que te exhiga que insertes algo si lo dejas nulo, y evitar que si mi llave es Unique o Index le dejen un valor nulo. Es opcional para ti, si tu llave es PK no te dejara insertar un valor nulo y gritara sino tienes autoincremento, si tu llave es Unique o Index si acceptara sin quejas valores nulos, pero si en los 3 casos tienes autoincremento ya sabes que el valor nulo pasara a ser el siguiente valor del autoincremento  . Sobre si siempre debe ser un int, eso depende... no recuerdo del todo pero creo que el tipo int aguanta valores entre 0 a 500 (lo siento no puedo ayudarte mucho en hasta que valor guarda). Se que tinyint que consume menos ram, guarda valores desde 0 hasta 255 me parece.
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|