- DROP TABLE IF EXISTS `tbl_counter`;
- DROP FUNCTION IF EXISTS `GetCounterValue`;
-
- CREATE TABLE IF NOT EXISTS `tbl_counter` (
- `name` varchar(100) NOT NULL,
- `value` bigint(20) NOT NULL,
- PRIMARY KEY (`name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
- DELIMITER ;;
- CREATE FUNCTION `GetCounterValue`(name VARCHAR(100)) RETURNS bigint(20)
- MODIFIES SQL DATA
- BEGIN
- DECLARE count TINYINT(1) DEFAULT 0;
- DECLARE value BIGINT DEFAULT 0;
- DECLARE a INT;
-
- SELECT GET_LOCK(name, -1) INTO a;
-
- SELECT COUNT(*) INTO count FROM tbl_counter WHERE tbl_counter.name = name;
-
- IF count = 0 THEN
- INSERT INTO tbl_counter (tbl_counter.name, tbl_counter.value) VALUES (name, 0);
- END IF;
-
- UPDATE tbl_counter SET tbl_counter.value = tbl_counter.value + 1 WHERE tbl_counter.name = name;
-
- SELECT tbl_counter.value INTO value FROM tbl_counter WHERE tbl_counter.name = name;
-
- SELECT RELEASE_LOCK(name) INTO a;
-
- RETURN value;
- END;;
- DELIMITER ;
DROP TABLE IF EXISTS `tbl_counter`;
DROP FUNCTION IF EXISTS `GetCounterValue`;
CREATE TABLE IF NOT EXISTS `tbl_counter` (
`name` varchar(100) NOT NULL,
`value` bigint(20) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DELIMITER ;;
CREATE FUNCTION `GetCounterValue`(name VARCHAR(100)) RETURNS bigint(20)
MODIFIES SQL DATA
BEGIN
DECLARE count TINYINT(1) DEFAULT 0;
DECLARE value BIGINT DEFAULT 0;
DECLARE a INT;
SELECT GET_LOCK(name, -1) INTO a;
SELECT COUNT(*) INTO count FROM tbl_counter WHERE tbl_counter.name = name;
IF count = 0 THEN
INSERT INTO tbl_counter (tbl_counter.name, tbl_counter.value) VALUES (name, 0);
END IF;
UPDATE tbl_counter SET tbl_counter.value = tbl_counter.value + 1 WHERE tbl_counter.name = name;
SELECT tbl_counter.value INTO value FROM tbl_counter WHERE tbl_counter.name = name;
SELECT RELEASE_LOCK(name) INTO a;
RETURN value;
END;;
DELIMITER ;