2011-05-24 25 views
33

Configuré una tabla de prueba para un error que encontré recientemente. Implica el uso de LIMIT al intentar eliminar un solo registro de una tabla MySQL.MySQL LÍMITE en la declaración DELETE

El error del que hablo es "Usted tiene un error en su sintaxis SQL, consulte el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'LIMIT 1' en la línea 1"

La tabla que armé se llama test; tiene 3 columnas, id, nombre y creó. Rellené la tabla con varios registros y luego intenté eliminar uno. A continuación se muestra la declaración que usé para tratar de lograr esto.

DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1

Sin el uso de LIMIT 1, la instrucción se ejecuta muy bien, pero por supuesto no estaría utilizando LÍMITE si no había una necesidad de ella.

Soy plenamente consciente de que puedo usar otra declaración para lograr este DELETE satisfactoriamente. Consulte a continuación: DELETE FROM test WHERE name = 'foo' LIMIT 1

Sin embargo, mi pregunta se centra en por qué la primera afirmación no funciona con LIMIT.

Así que mi pregunta es, ¿qué he hecho incorrectamente con respecto a la primera declaración para generar este error?

Respuesta

18

la consulta de eliminación solo permite modificadores después del comando DELETE para indicarle a la base de datos qué/cómo manejamos las cosas.

ver this page

+10

"Sin embargo, no puede usar ORDER BY o LIMIT en un DELETE de tablas múltiples". Esto parece responder a mi pregunta. – Andre

+1

sí, no lo leí del OP, pero lo que dices acerca de eliminar de una unión es correcto –

24

simplemente utilizar

DELETE FROM test WHERE 1= 1 LIMIT 10 
+1

El OP claramente afirmó que él sabe que esto está funcionando ... "Soy plenamente consciente de que puedo usar otra declaración para lograr este DELETE con éxito. [...] 'DELETE FROM prueba WHERE name = 'foo' LIMIT 1'" –

2

Uso row_count - your_desired_offset

Así que si tuviéramos 10 filas y quieren compensar 3

10 - 3 = 7 

Ahora la consulta delete from table where this = that order asc limit 7 mantiene el último 3 y order desc para ke ep la primera 3:

$row_count - $offset = $limit 

Delete from table where entry = criteria order by ts asc limit $limit 
4
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1 

@Andre Si he entendido lo que están pidiendo, creo que la única cosa que falta es el t * antes FROM..

Cuestiones relacionadas