| |||
![]() Saludos, estoy dando de alta un nuevo elemento en mi primera tabla de mi base, pero quiero que me regrese la clave primaria de ese elemento que recien inserte, pues la tengo en autonumerico, y a la vez esa clave la voy a usar para insertarla en mi segunda tabla junto con mas datos para asi asociar los datos de mi segunda tabla con la primera. Gracias... |
| |||
Respuesta: despues de una Alta que me muestre la clave primaria Actualmente estoy haciendo un programa en PHP, y desde ahi lo que realizo es las respectivas operaciones SQL para obtener la pk de la primera tabla y posterior de obtener esa pk la uso para insertarla en mi segunda tabla. 1- inserto datos en mi primera tabla. 2- hago una consulta con esos datos que recien inserte para obtener la pk de la primera tabla. 3- inserto la pk que obtuve de la consulta aterior en mi segunda tabla. El riesgo que he de correr es que los datos que inserto en la primera tabla (sin contar la pk) se repite probablemente. es por eso que pregunto si existe alguna otra manera de asegurar que no tenga errores al momento de conseguir la pk de mi primera tabla.... Gracias... PD: pk = primary key. |
| ||||
Respuesta: despues de una Alta que me muestre la clave primaria PHP tiene una función propia en su librería de conexión a MySQL que te devuelve precisametne la ultima ID autoincremental generada en un INSERT. La puedes ver en el manual de referencia on-line de PHP: PHP:: Manual de PHP Librería MySQL: mysql_insert_id() — Obtiene la ID generada en la última consulta Librería MYSQLI (POO): mysqli->insert_id — Returns the auto generated id used in the last query En los links encontrarás ejemplos de su uso bastante simples y comprensibles. Cita: Una PK autoincremental no se puede repetir. Jamás. Lo que tienes que hacer es dejarle a MySQL el generarla y no andar consultando su último valor para crearla por ti mismo, especialmente si no vas a usar transacciones en tu gestion de la base (te recomiendo enfáticamente utilizarlas). En ese caso debes puedes mandar el INSERT indicando qué campos insertarás y omitiendo de la lista el de la PK. MySQL asumirá que ese valor es NULL y lo generará automáticamente.El riesgo que he de correr es que los datos que inserto en la primera tabla (sin contar la pk) se repite probablemente. es por eso que pregunto si existe alguna otra manera de asegurar que no tenga errores al momento de conseguir la pk de mi primera tabla.... Si no quieres indicar los campos a insertar lo que tienes que hacer es enviar un NULL en el lugar de la PK y MySQL se encargará del resto. Ppara usar el valor devuelto en el autonumérico, simplemente lo invocas desde esa función en la siguiente sentencia. Otra forma de gestionar todo es usar stored proedures, que además tienen otras ventajas, como seguridad, evitar el sql-injection, y el manejo de operaciones atómicas.. No sé si estás práctico con el tema. Si no quieres usar transacciones, entonces lo que debes hacer es bloquear la tabla al momento de hacer la consulta del último valor, de modo de hacer una reserva de próxima ID. Eso se hace haciendo un
Código MySQL:
Ver original Consulta los detalles en el manual de referencia, si quieres: MySQL AB MySQL 5.0 Reference Manual
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) Última edición por gnzsoloyo; 02/05/2011 a las 09:20 |
| |||
Respuesta: despues de una Alta que me muestre la clave primaria Cita: Gracias por la liga de bloqueo, me será útil!!!
Iniciado por gnzsoloyo ![]() PHP tiene una función propia en su librería de conexión a MySQL que te devuelve precisametne la ultima ID autoincremental generada en un INSERT. La puedes ver en el manual de referencia on-line de PHP: [URL="http://ar2.php.net/manual/es/"]PHP:: Manual de PHP[/URL] Librería MySQL: [URL="http://ar2.php.net/manual/es/function.mysql-insert-id.php"]mysql_insert_id() [/URL]— Obtiene la ID generada en la última consulta Librería MYSQLI (POO): [URL="http://ar2.php.net/manual/es/mysqli.insert-id.php"]mysqli->insert_id[/URL] — Returns the auto generated id used in the last query En los links encontrarás ejemplos de su uso bastante simples y comprensibles. Una PK autoincremental no se puede repetir. Jamás. Lo que tienes que hacer es dejarle a MySQL el generarla y no andar consultando su último valor para crearla por ti mismo, especialmente si no vas a usar transacciones en tu gestion de la base (te recomiendo enfáticamente utilizarlas). En ese caso debes puedes mandar el INSERT indicando qué campos insertarás y omitiendo de la lista el de la PK. MySQL asumirá que ese valor es NULL y lo generará automáticamente. Si no quieres indicar los campos a insertar lo que tienes que hacer es enviar un NULL en el lugar de la PK y MySQL se encargará del resto. Ppara usar el valor devuelto en el autonumérico, simplemente lo invocas desde esa función en la siguiente sentencia. Otra forma de gestionar todo es usar stored proedures, que además tienen otras ventajas, como seguridad, evitar el sql-injection, y el manejo de operaciones atómicas.. No sé si estás práctico con el tema. Si no quieres usar transacciones, entonces lo que debes hacer es bloquear la tabla al momento de hacer la consulta del último valor, de modo de hacer una reserva de próxima ID. Eso se hace haciendo un
Código MySQL:
Ver original Consulta los detalles en el manual de referencia, si quieres: [URL="http://dev.mysql.com/doc/refman/5.0/es/innodb-next-key-locking.html"][B]MySQL AB MySQL 5.0 Reference Manual[/B][/URL] |
Etiquetas: |