Tôi sẽ không bận tâm đến khả năng xảy ra va chạm. Chỉ cần tạo một chuỗi ngẫu nhiên và kiểm tra xem nó có tồn tại hay không. Nếu đúng, hãy thử lại và bạn không cần phải làm điều đó nhiều lần trừ khi bạn đã chỉ định một số lượng lớn đĩa.
Một giải pháp khác để tạo chuỗi giả ngẫu nhiên dài 8 ký tự trong SQL thuần túy (của tôi):
SELECT LEFT(UUID(), 8);
Bạn có thể thử cách sau (mã giả):
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
Vì bài đăng này đã nhận được mức độ chú ý ngoài mong đợi, hãy để tôi đánh dấu Nhận xét của ADTC :đoạn mã trên khá khó hiểu và tạo ra các chữ số liên tiếp.
Đối với sự ngẫu nhiên ít ngu ngốc hơn một chút, hãy thử một cái gì đó như thế này thay thế:
SELECT LEFT(MD5(RAND()), 8)
Và đối với tính ngẫu nhiên thực sự (bảo mật bằng mật mã), hãy sử dụng RANDOM_BYTES()
chứ không phải là RAND()
(nhưng sau đó tôi sẽ xem xét chuyển logic này lên lớp ứng dụng).