Эй, ребята, вот что я не могу понять.У нас есть таблица в базе данных, куда PHP вставляет записи.Я создал триггер для вычисления значения для вставки.Вычисленное значение должно быть уникальным.Однако время от времени случается, что у меня есть одно и то же число для нескольких строк в таблице.Число представляет собой комбинацию года, месяца и дня и номера заказа на этот день.Я думал, что одна операция вставки является атомарной, и таблица заблокирована во время транзакции.Мне нужно, чтобы вычисленное значение было уникальным ... Сервер версии 5.0.88.Сервер Linux CentOS 5 с двухъядерным процессором.
Вот триггер:
CREATE TRIGGER bi_order_data BEFORE INSERT ON order_data
FOR EACH ROW BEGIN
SET NEW.auth_code = get_auth_code();
END;
Соответствующая процедура выглядит следующим образом:
CREATE FUNCTION `get_auth_code`() RETURNS bigint(20)
BEGIN
DECLARE my_auth_code, acode BIGINT;
SELECT MAX(d.auth_code) INTO my_auth_code
FROM orders_data d
JOIN orders o ON (o.order_id = d.order_id)
WHERE DATE(NOW()) = DATE(o.date);
IF my_auth_code IS NULL THEN
SET acode = ((DATE_FORMAT(NOW(), "%y%m%d")) + 100000) * 10000 + 1;
ELSE
SET acode = my_auth_code + 1;
END IF;
RETURN acode;
END