elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  SQLite3 INSERT INTO + EXCEPT [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SQLite3 INSERT INTO + EXCEPT [SOLUCIONADO]  (Leído 4,417 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
SQLite3 INSERT INTO + EXCEPT [SOLUCIONADO]
« en: 3 Octubre 2015, 12:14 pm »

Hola tengo una table:

Código
  1. CREATE TABLE `test` (
  2. `ID` INTEGER PRIMARY KEY AUTOINCREMENT,
  3. `name` TEXT NOT NULL,
  4. `number` INT NOT NULL
  5. );
  6. INSERT INTO test VALUES(NULL,'Jose',21)
  7.  

Que al ejecutar:

Código
  1. INSERT INTO test VALUES(NULL,'Jose',21) EXCEPT SELECT * FROM test WHERE name='Jose'

Debería de NO insertar nada, pero si lo hace.

En cambio en esta tabla:
Código
  1. CREATE TABLE `test` (
  2. `name` TEXT NOT NULL,
  3. `number` INT NOT NULL
  4. );
  5. INSERT INTO test VALUES('Jose',21)
  6.  

Al ejecutar:

Código
  1. INSERT INTO test VALUES('Jose',21) EXCEPT SELECT * FROM test WHERE name='Jose'

Funciona perfecto.
El PRIMARY KEY ID hace que no funcione pero no se porque. ??

Un saludo


« Última modificación: 5 Octubre 2015, 21:11 pm por patilanz » En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.764


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: SQLite3 INSERT INTO + EXCEPT
« Respuesta #1 en: 5 Octubre 2015, 07:24 am »

Hola,

Yo no soy experto en SQLite pero creo que puedo deducir lo que está ocurriendo.

Fíjate en la primera tabla, al hacer el primer INSERT, el campo ID (primary key) tomará un valor, digamos '1', así que tendrías el registro (1,'Jose',21). Al tratar de hacer el segundo INSERT, el ID ahora será de '2', dando como resultado el registro (2,'Jose',21). Al hacer la validación, el registro (2,'Jose',21) no es lo mismo que el registro (1,'Jose',21), por lo que la excepción no aplica y se inserta el registro.

En la segunda tabla no hay campo ID, el primer INSERT será el registro ('Jose',21). En el segundo INSERT el registro que se intentará insertar será ('Jose',21), como es idéntico al anterior, la excepción aplica y no se inserta.

Por cierto, ¿por qué quieres hacer esto?, ¿por qué no haces que el campo 'name' sea UNIQUE?


En línea





Dominio en venta: https://forojapones.com/
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: SQLite3 INSERT INTO + EXCEPT
« Respuesta #2 en: 5 Octubre 2015, 07:49 am »

Si hay tres campos y ninguno de ellos es el ID único funciona bien porque si hago EXPECT de 2 campos y en la tabla hay tres, el tercero es diferente funciona por lo tanto aunque sea
(1,'Jose',21) (2,'Jose',21) haciendo SELECT * FROM test WHERE name='Jose' AND number=21 debería de funcionar porque en el SELECT no digo que no puede otros campos y si lo ejecuto solo me salen las dos filas pero si lo junto con EXCEPT e INSERT ya nada, como si no se seleccionara nada.

El nombre no es único, es único el nombre mas el numero a la vez, es decir pueden existir campos así: (1,'Jose',21) (2,'Jose',23) pero no (1,'Jose',21) (2,'Jose',21)
En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.764


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: SQLite3 INSERT INTO + EXCEPT
« Respuesta #3 en: 5 Octubre 2015, 17:23 pm »

Si hay tres campos y ninguno de ellos es el ID único funciona bien porque si hago EXPECT de 2 campos y en la tabla hay tres, el tercero es diferente funciona por lo tanto aunque sea
(1,'Jose',21) (2,'Jose',21) haciendo SELECT * FROM test WHERE name='Jose' AND number=21 debería de funcionar porque en el SELECT no digo que no puede otros campos y si lo ejecuto solo me salen las dos filas pero si lo junto con EXCEPT e INSERT ya nada, como si no se seleccionara nada.

El EXCEPT no trabaja sobre las columnas sino sobre un conjunto de registros. Imagínate que es así:

Código
  1. INSERT INTO test VALUES(NULL,'Jose',21) EXCEPT (SELECT * FROM test WHERE name='Jose');

entonces el SELECT se ejecuta primero y te traerá los registros enteros (con todas sus columnas, incluído el id) cuyo name = 'Jose', luego el INSERT ingresará a la tabla el registro a menos que coincida exactamente con alguno de los registros que trajo el SELECT.

Citar
El nombre no es único, es único el nombre mas el numero a la vez, es decir pueden existir campos así: (1,'Jose',21) (2,'Jose',23) pero no (1,'Jose',21) (2,'Jose',21)

¿Qué tal un índice UNIQUE sobre las 2 columnas (name y number)?
En línea





Dominio en venta: https://forojapones.com/
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: SQLite3 INSERT INTO + EXCEPT
« Respuesta #4 en: 5 Octubre 2015, 21:11 pm »

Gracias por sus respuesta pero lo hice así:

Código
  1. INSERT INTO test (name,NUMBER) VALUES('Jose',21) EXCEPT SELECT name,NUMBER FROM test WHERE name='Jose' AND NUMBER=21

La table tiene ID pero no lo selecciono y se inserta solo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SQLite3
Programación Visual Basic
cobein 3 3,654 Último mensaje 13 Octubre 2009, 23:02 pm
por Karcrack
sqlite3
Wireless en Linux
Marmol 2 2,806 Último mensaje 27 Junio 2010, 23:55 pm
por Marmol
[Solucionado] Problema con bulk insert
Bases de Datos
criskapunk 0 8,550 Último mensaje 16 Junio 2011, 14:59 pm
por criskapunk
no bootable device insert boot disk and press any key "(SOLUCIONADO)"
Hardware
Charlieone 9 31,409 Último mensaje 21 Marzo 2013, 14:43 pm
por Charlieone
[solucionado] mysqli rollback todos los insert si uno falla
PHP
gAb1 2 3,055 Último mensaje 12 Abril 2016, 02:35 am
por gAb1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines