dmitq dmitq - 2 years ago 90
MySQL Question

MySQL - auto decrementing value

Let's say that I've got a table, like that (id is auto-increment):

id | col1 | col2
1 | 'msg'| 'msg'
2 | 'lol'| 'lol2'
3 | 'xxx'| 'x'

Now, I want to delete row number 2 and I get something like this

id | col1 | col2
1 | 'msg'| 'msg'
3 | 'xxx'| 'x'

The thing is, what I want to get is that:

id | col1 | col2
1 | 'msg'| 'msg'
2 | 'xxx'| 'x'

How can I do that in the EASIEST way (my knowledge about MySQL is very poor)?

Answer Source

You shouldn't do that.
Do not take an auto-incremented unique identifier as an ordinal number.
The word "unique" means that the identifier should be stuck to its row forever.

There is no connection between these numbers and enumerating.
Imagine you want to select records in alphabetical order. Where would your precious numbers go? A database is not like an ordered list, as you probably think. It is not a flat file with rows stored in a predefined order. It has totally different ideology. Rows in the database do not have any order. And will be ordered only at select time, if it was explicitly set by ORDER BY clause.
Also, a database is supposed to do a search for you. So you can tell that with filtered rows or different ordering this auto-increment number will have absolutely nothing to do with the real rows positions.

If you want to enumerate the output - it's a presentation layer's job. Just add a counter on the PHP side.

And again: these numbers supposed to identify a certain record. If you change this number, you'd never find your record again.

Take this very site for example. Stack Overflow identifies its questions with such a number:

So, imagine you saved this page address to a bookmark. Now Jeff comes along and renumbers the whole database. You press your bookmark and land on the different question. Whole site would become a terrible mess.

Remember: Renumbering unique identifiers is evil!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download