sql >> Base de Datos >  >> RDS >> SQLite

SQLite - Eliminar datos

El DELETE puede usarse para eliminar datos en una tabla.

El WHERE La cláusula se puede usar para especificar exactamente qué filas se deben eliminar.

Puede eliminar todas las filas, algunas filas o ninguna, según las condiciones de filtrado aplicadas por WHERE cláusula.

Una eliminación simple

Primero, busquemos un artista para eliminar:

sqlite> SELECT * FROM Artists;
ArtistId  ArtistName            Bio                                     
--------  --------------------  ----------------------------------------
1         Joe Satriani                                                  
2         Steve Vai                                                     
3         The Tea Party                                                 
4         Noiseworks                                                    
5         Wayne Jury                                                    
6         Mr Percival                                                   
7         Iron Maiden                                                   
8         Atmasphere            Australian jazz band centred around poly
9         Ian Moss                                                      
10        Magnum                                                        
11        Strapping Young Lad                                           
12        Slayer                                                        
13        Primus                                                        
14        Pat Metheny                                                   
15        Frank Gambale                                                 
16        Mothers of Invention                                          
17        The Wiggles                                                   

Bien, eliminemos el número de artista 12 (Asesino).

Aquí está la declaración de eliminación simple que elimina ese registro de los Artistas tabla:

DELETE FROM Artists
WHERE ArtistId = 12;

Entonces, después de ejecutar eso, podemos verificar que el registro se eliminó de hecho con SELECT declaración:

sqlite> SELECT * FROM Artists WHERE ArtistId = 12;
sqlite>                                                                     

(Sin resultados).

Eliminación de datos con una restricción de clave externa

Si intenta eliminar un registro al que hace referencia una clave externa, debería obtener un error. Primero deberá eliminar los registros de la clave externa, antes de eliminar el registro de la clave principal.

Por ejemplo, ID de artista 17 (de los Artistas table) pasa a estar referenciado por dos registros en Albums (consulte la tabla ArtistId columna):

sqlite> SELECT * FROM Albums WHERE ArtistId = 17;
AlbumId   AlbumName             ReleaseDate   ArtistId    
--------  --------------------  ------------  ------------
5         Yummy Yummy           1994          17          
13        Big Red Car           1995          17          

Entonces, si intentamos eliminar al artista 17 de la tabla Artistas (que contiene la clave principal), deberíamos obtener un error.

Aquí está la declaración de eliminación:

DELETE FROM Artists
WHERE ArtistId = 17;

Y aquí está el resultado:

sqlite> DELETE FROM Artists
   ...> WHERE ArtistId = 17;
Error: FOREIGN KEY constraint failed
sqlite> 

Por lo tanto, debemos eliminar los registros de la clave externa antes de eliminar la clave principal.

Si no obtuvo una Falló la restricción FOREIGN KEY mensaje, es posible que deba habilitar la verificación de restricciones de clave externa. Ejecute PRAGMA foreign_keys = ON; para habilitar las comprobaciones de restricciones de clave externa.

Eliminar registros asociados

Entonces, eliminemos los registros asociados en los Álbumes tabla, antes de volver a intentar la declaración de eliminación anterior.

DELETE FROM Albums
WHERE ArtistId = 17;

Comprueba que se hayan eliminado:

sqlite> SELECT * FROM Albums WHERE ArtistId = 17;
sqlite> 

(Sin resultados).

Ahora intentemos la declaración de eliminación original de nuevo:

DELETE FROM Artists
WHERE ArtistId = 17;

Parece prometedor, no hay error:

sqlite> DELETE FROM Artists
   ...> WHERE ArtistId = 17;
sqlite> 	

Y un SELECT declaración confirma la eliminación:

sqlite> SELECT * FROM Artists WHERE ArtistId = 17;
sqlite> 

Sin resultados.

Eliminar todas las filas

Puede eliminar todas las filas de una tabla omitiendo WHERE cláusula.

Tenemos una mesa libre ( Albums1 ), así que intentémoslo en ese.

Primero, verifiquemos que realmente contenga datos:

sqlite> SELECT * FROM Albums1;
AlbumId   AlbumName             Year          ArtistId    
--------  --------------------  ------------  ------------
1         Killers               1981          7           
2         Powerslave            1984          7           
3         Surfing with the Ali  1987          1           
4         Heavy as a Really He  1995          11          
5         Yummy Yummy           1994          17          
6         Out of the Loop       2007          6           
7         Suck on This          1989          13          
8         Pork Soda             1993          13          
9         Sailing the Seas of   1991          13          
10        Flying in a Blue Dre  1989          1           
11        Black Swans and Worm  2010          1           
12        Somewhere in Time     1986          7           
13        Big Red Car           1995          17          

Lo hace. Así que sigamos adelante y eliminémoslo todo:

DELETE FROM Albums1;

Ahora revisemos su contenido nuevamente:

sqlite> SELECT * FROM Albums1;
sqlite> 

(Sin resultados).