2010-09-14 30 views
8

¿Hay alguna manera de verificar si una fila podría ser eliminada? Que, por ejemplo, no está actualmente conectado a través de claves externas restringidas a cualquier otra cosa.Compruebe si se puede eliminar una fila en MySQL

Motivo: Estoy creando una página de administración con todos los usuarios del sistema enumerado. Siempre se pueden desactivar, pero también se pueden eliminar. Sin embargo, solo pueden eliminarse si no están conectados a algo crítico. Y me gustaría no tener que verificarlo manualmente si se puede hacer fácilmente en la base de datos.

Nota: No quiero eliminar ningún usuario. Solo quiero mostrar al administrador que un usuario podría ser eliminado.

+0

Intente eliminarlo. Si el DB se queja, no fue posible. ;) – BoltBait

+0

Siempre puede eliminar el administrador eliminando primero las cosas conectadas y luego eliminando el administrador. – Bot

+1

Um, sí, pero ya se eliminará, lo que podría o no ser lo que el administrador quería: p Solo quiero mostrar si es posible. – Svish

Respuesta

3

Puede intentar eliminarlo como parte de una transacción y luego deshacer la transacción si tiene éxito. PERO, supongo que la pregunta inmediata es, ¿por qué no sabrías en primer lugar si puedes eliminar la fila o no?

+1

Debido a que podría tener varias restricciones asociadas a él a través de claves externas y me gustaría no tener que verificar manualmente todas ellas, ya que podrían cambiar si agregué o eliminé una tabla más adelante. – Svish

+0

Entonces tiene una falla en la lógica de negocios. Ese tipo de verificación debe hacerse en la capa de su empresa, que realizará las consultas necesarias para garantizar que el usuario no esté conectado a nada. – GrandmasterB

+2

La integridad de los datos pensados ​​y las comprobaciones de ese tipo ¿para qué eran las restricciones de clave externa? – Svish

1

Puede utilizar una vista para resumir el número de dependencias sin tener que preocuparse de almacenar los datos & manteniéndolo al día. Cuando el número de dependencias es cero, active la opción Eliminar en la interfaz de usuario ...

0

Puede juntar todas las filas huérfanas a la mesa a la que están conectadas, p. esto le dará todas las identificaciones de usuario que no tienen ningún trabajo.

SELECT u.id FROM users u LEFT JOIN jobs j on u.id=j.user_id WHERE j.user_id is null; 
Cuestiones relacionadas