2010-09-14 14 views
8

Esiste un modo per controllare se una riga potrebbe essere eliminata? Ad esempio, per esempio non è attualmente collegato tramite chiavi esterne riservate a qualcos'altro.Verifica se una riga può essere eliminata in MySQL

Motivo: sto creando una pagina di amministrazione con tutti gli utenti nel sistema elencato. Possono sempre essere disabilitati, ma possono anche essere cancellati. Tuttavia possono essere cancellati solo se non sono collegati a qualcosa di critico. E vorrei non doverlo controllare manualmente se può essere fatto facilmente nel database.

Nota: Non voglio eliminare alcun utente. Voglio solo mostrare all'amministratore che un utente potrebbe essere cancellato.

+0

Cercare di eliminarlo. Se il db si lamenta, non è stato possibile. ;) – BoltBait

+0

È sempre possibile eliminare l'amministratore eliminando prima le cose connesse, quindi eliminando l'amministratore. – Bot

+1

Um, si, ma poi sarà già cancellato, che potrebbe o potrebbe non essere quello che l'amministratore voleva: p Voglio solo mostrare se è possibile. – Svish

risposta

3

Si potrebbe provare a eliminarlo come parte di una transazione e quindi eseguire il rollback della transazione se ha esito positivo. MA, suppongo che l'immediata domanda successiva sia, perché non lo sapresti in primo luogo se potessi cancellare la riga o no?

+1

Perché potrebbe avere diverse restrizioni ad esso collegate tramite chiavi esterne e non vorrei doverle controllare manualmente tutte perché potrebbero potenzialmente cambiare se ho aggiunto o rimosso una tabella in seguito. – Svish

+0

Si ha quindi un errore nella logica aziendale. Questo tipo di verifica dovrebbe essere eseguita nel tuo livello aziendale, che eseguirà le query necessarie per garantire che l'utente non sia connesso a nulla. – GrandmasterB

+2

Integrità dei dati di pensiero e verifiche del genere erano le restrizioni delle chiavi esterne? – Svish

1

È possibile utilizzare una vista per sommare il numero di dipendenze senza doversi preoccupare di memorizzare i dati & mantenendo la corrente. Quando il numero di dipendenze è zero, rendere disponibile l'opzione di eliminazione nell'interfaccia utente ...

0

È possibile ottenere tutte le righe orfane mediante la connessione a sinistra alla tabella a cui sono connessi, ad es. questo ti darà tutti gli ID utente che non hanno alcun lavoro.

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