Saya tidak akan repot dengan kemungkinan tabrakan. Buat saja string acak dan periksa apakah ada. Jika ya, coba lagi dan Anda tidak perlu melakukannya lebih dari beberapa kali kecuali Anda memiliki banyak piring yang sudah ditetapkan.
Solusi lain untuk menghasilkan string pseudo-acak panjang 8 karakter dalam SQL (Saya) murni:
SELECT LEFT(UUID(), 8);
Anda dapat mencoba yang berikut (kode semu):
DO
SELECT LEFT(UUID(), 8) INTO @plate;
INSERT INTO plates (@plate);
WHILE there_is_a_unique_constraint_violation
-- @plate is your newly assigned plate number
Karena postingan ini mendapat perhatian yang tidak terduga, izinkan saya menyoroti komentar ADTC :potongan kode di atas cukup bodoh dan menghasilkan digit berurutan.
Untuk keacakan yang sedikit lebih bodoh, cobalah sesuatu seperti ini :
SELECT LEFT(MD5(RAND()), 8)
Dan untuk keacakan yang benar (aman secara kriptografis), gunakan RANDOM_BYTES()
daripada RAND()
(tetapi kemudian saya akan mempertimbangkan untuk memindahkan logika ini ke lapisan aplikasi).