MySQL UUID primary key - generated by PHP or by MySQL?
Asked Answered
P

3

11

I was under the impression that just having MySQL generate the primary key via UUID() would make the key unique across servers, etc.

But, there is no way to fetch the last inserted UUID, which requires that an extra select statement be done each time I insert.

Is it possible to have PHP generate the exact same UUID() that MySQL would generate?

Prostate answered 21/2, 2012 at 15:59 Comment(0)
B
15

No, it's not possible to have PHP generate the exact same UUID() as MySQL because it's a (completely) random number.

It sounds like your problem is that you like using UUID() in MySQL but don't want to execute an extra query to figure out what the new UUID is.

So why not have PHP create the UUID to be used as the primary key in your INSERT query?? This comment on php.net should show you how to do this.

Using those sample functions:

$uuid = UUID::v4();
$sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');";
echo "The UUID is: ". $uuid;

Edit: There are several methods on that page which generate different types of UUIDs. v4 is pseudo-random, but you could use a different version or create your own UUID generator.

Blesbok answered 21/2, 2012 at 16:12 Comment(2)
Hmm, using this method, I'd have to check if it's a unique uuid in MySQL, and if it's unique across servers. It seems an extra check-for-unique or data pull is required each way?Prostate
If you use randomly-generated UUIDs, you will not have this problem. Statistically, if you generated 1 billion UUIDs every second for 100 years, there's only a 50% chance that just one of them will collide. (Source: en.wikipedia.org/wiki/…) Although you will likely never see a collision, it would still be smart to make the UUID a primary key in MySQL and sync the servers regularly.Progressive
O
0

Depending on your exact szenario, I would probbably use a stored procedure. That way, you can

  • generate a mySQL UUID(),
  • store it in a variable,
  • execute the INSERT statement
  • SELECT the variable
Olivia answered 2/3, 2023 at 12:38 Comment(0)
G
-1

I tried the first step: $uuid = UUID::v4(); but it hung my server, so another idea came to mind which I tried as follows:

fetch data from query $sql1 = SELECT UUID() AS uuid ;
then store in variable $uuid

and then use below

$sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');";
echo "The UUID is: ". $uuid;
Goddess answered 27/4, 2014 at 0:0 Comment(1)
Using SQL to generate the UUID, rather than PHP, offers no benefits and will be slower as it will require multiple queries to the DB server (even if that is on the same machine).Cablet

© 2022 - 2024 — McMap. All rights reserved.