Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 06-11-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por oscarac Ver Mensaje
alguien mas en la web (php) que usa esta misma tabla ya capturo y grabo ese numero, por lo cual me aparece el mensaje de error (porque es un campo PK) que no acepta duplicados
Un rdbms esta pensado para multiples usuarios/app. DEJA DE PENSAR QUE TIENES EL CONTROL TOTAL.

Esta es la clave.

Cita:
Empezado por oscarac Ver Mensaje
lo obtengo generando el MAX del campo y le sumo 1, el asunto es que cuando estoy tratando de obtener el ultimo numero para sumarle uno,
Primer problema. Esta no es la forma de tener IDs propios. Lo que haces es subotpimo:

https://stackoverflow.com/questions/...y-alternatives

Como funciona un max?

Tienes un MILLON de registros. La BD por defecto, recorre el MILLON de registro comparando si este es mayor al anterior. Al final, da un resultado. Luego le sumas 1. Esos significa que estas introduciendo una ESPERA. Eso genera una ventana para que otra operacion compita contigo. (Con un indice se puede agilizar el proceso. Igual, es una demora)

En otras palabras, el orden de ejecucion en una RDBMS NO ES deterministico, sino aleatorio. (a menos que uses una transaccion, pero nota mas abajo).

La forma de tener tu propio generador:
  • Usa un autoincrement, es lo mejor
  • Usa una tabla "consecutivos" de un solo registro. Guardas el ultimo y tomas y actualizas de ella. Es MUCHO mas rapido que hacerle max a tus tablas.
  • Abandona los IDs consecutivos y usa un campo GUID o similar, que estan hechos para IDs GLOBALES.

Cita:
Empezado por oscarac Ver Mensaje
uso transacciones
Solo son LOCALES A TU OPERACION. No hay una forma *eficiente* de hacer transacciones globales, y lo que hay implica meter un monton de asuntos que es mejor no lidiar con ellos.

Cita:
Empezado por oscarac Ver Mensaje
no podria bloquear la tabla para grabar el registro q quiero y despues liberarla ?
o estoy usando mal las transaciones
Eso es NEGAR la forma como funciona un rdbms. Lo que en otras palabras, es malo. Por ejemplo, si pones un campo booleano para indicar que el registro esta "ocupado" y luego lo deschuleas, eso puede PARECER que funciona. Pero si la app muere a mitad del camino? Dejas el registro bloqueado y generas un DEAD LOCK. Algo que empieza por "dead" no es nada bueno!

-----
Asi, que que hacer? El problema que tienes te grita: Tu diseño esta errado. Deja que la BD genere IDs.

A menos que presentes un escenario justificable, yo pararía ahi.
__________________
El malabarista.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
tablas en sql server demasiadas tablas yeison Cristman SQL 8 10-08-2006 16:26:36
Uso SQL Server, las tablas no se refrescan yeison Cristman SQL 4 09-08-2006 07:07:54
bloqueo de tablas davidgaldo Conexión con bases de datos 0 26-11-2004 13:23:56
Bloqueo de tablas en dbase metronio Tablas planas 1 29-09-2004 14:20:41
Tablas de sistema SQL SERVER fjcg02 SQL 3 29-12-2003 14:07:48


La franja horaria es GMT +2. Ahora son las 03:30:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi