How to generate unique id in MySQL?
I use UUID() to create a unique value.
example:
insert into Companies (CompanyID, CompanyName) Values(UUID(), "TestUUID");
A programmatic way can be to:
- add a UNIQUE INDEX to the field
- generate a random string in PHP
- loop in PHP ( while( ! DO_THE_INSERT ) )
- generate another string
Note:
- This can be dirty, but has the advantage to be DBMS-agnostic
- Even if you choose to use a DBMS specific unique ID generator function (UUID, etc) it is a best practice to assure the field HAS to be UNIQUE, using the index
- the loop is statistically not executed at all, it is entered only on insert failure
You may like the way that we do it. I wanted a reversible unique code that looked "random" -a fairly common problem.
- We take an input number such as 1,942.
- Left pad it into a string: "0000001942"
- Put the last two digits onto the front: "4200000019"
- Convert that into a number: 4,200,000,019
We now have a number that varies wildly between calls and is guaranteed to be less than 10,000,000,000. Not a bad start.
- Convert that number to a Base 34 string: "2oevc0b"
- Replace any zeros with 'y' and any ones with 'z': "2oevcyb"
- Upshift: "2OEVCYB"
The reason for choosing base 34 is so that we don't worry about 0/O and 1/l collisions. Now you have a short random-looking key that you can use to look up a LONG database identifier.