Liczniki w MySQL…
Czyli jak zmodyfikować wartość i pobrać ją w sposób atomiczny.
Można to rozwiązać za pomocą tabeli z kolumną auto_increment, ale w tym przypadku jedna tabela = jeden licznik. Gdy chcemy mieć więcej liczników można wykorzystać do tego konstrukcję INSERT .. ON DUPLICATE KEY i podzapytania ze zmiennymi.
Schemat tabeli:
CREATE TABLE `counter` (
`id` int(10) unsigned NOT NULL,
`count` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`);
) ENGINE=InnoDB;
`id` int(10) unsigned NOT NULL,
`count` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`);
) ENGINE=InnoDB;
Zapytania zwiększające licznik numer 1 i pobierające jego wartość:
INSERT INTO counter (id, count)
(SELECT 1, @count := 1)
ON DUPLICATE KEY UPDATE count = (SELECT @count := count + 1);
(SELECT 1, @count := 1)
ON DUPLICATE KEY UPDATE count = (SELECT @count := count + 1);
SELECT @count AS count;
Na razie brak Komentarzy