9

I would like to update a specific range of rows, say starting from 30 and ending at 50. How may I achieve that.

I have tried with:

UPDATE tab SET col = 'somevalue' LIMIT 30, 50 

but this doesn't work. Is there any way that I can update these rows?

The error that I get is:

Check the manual ... for the right syntax to use near ' 50'

3
  • 1
    How does this not work? Commented Apr 20, 2014 at 13:52
  • 1
    what error do you get? Commented Apr 20, 2014 at 13:53
  • 4
    limit and offset don't make sense without an order by because rows in a relational database are not sorted Commented Apr 20, 2014 at 13:55

2 Answers 2

14

Your statement is not valid MySQL syntax and it doesn't make sense. The problem with the syntax is that offset is not supported for update statements (see here).

The problem with the logic is that you have no order by clause. MySQL doesn't guarantee the order of tables when processing them. So the "first" twenty rows and the "next" twenty" rows make no difference.

Why doesn't this do what you want?

UPDATE tab SET col = 'somevalue' LIMIT 20; 

If you have a specific column that specifies the ordering, you can use where:

UPDATE tab SET col = 'somevalue' wHERE ID >= 30 and ID < 50; 
Sign up to request clarification or add additional context in comments.

Comments

2

I think with update you can not use limit as it is in select(offset support), you will have to try like this:-

UPDATE tab SET col = 'somevalue' where id between 30 and 50; 

LIMIT can be used with UPDATE but with the row count only, such as

UPDATE tab SET col = 'somevalue' where id > 30 limit 20; 

Similar question here.

1 Comment

Nearly. It's OFFSET that mysql objects to.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.