mysql新的一天重新累加计数(新的一天重新自增长)
2016-04-25 15:48
495 查看
要做一个累加的自增长,要求是每天清零重新计算,其实就是排号,但是因为某些原因又不能再内存中去做,只能写个存储过程在数据库中去做。
创建表,自增序列表
CREATE TABLE `t_sequence` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT '1',
`create_time` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='序列表,命名s_[table_name]'
两个存储过程函数
DELIMITER $$
USE `wxclouds`$$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE VALUE INTEGER;
SET VALUE = 0;
SELECT current_value INTO VALUE FROM t_sequence WHERE NAME = seq_name;
RETURN VALUE;
END$$
DELIMITER ;
#############################################最主要的是下边这个
DELIMITER $$
USE `wxclouds`$$
DROP FUNCTION IF EXISTS `nextval`$$
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS INT(11)
DETERMINISTIC
BEGIN
DECLARE LASTTIME DATE ;
SELECT create_time INTO LASTTIME FROM t_sequence WHERE NAME = seq_name;
IF TO_DAYS(CURDATE())=TO_DAYS(LASTTIME)
THEN
UPDATE t_sequence SET current_value = current_value + increment, create_time =NOW() WHERE NAME = seq_name;
ELSE
UPDATE t_sequence SET current_value = 0 , create_time =NOW() WHERE NAME = seq_name;
END IF;
RETURN currval(seq_name);
END$$
DELIMITER ;
测试语句
SELECT nextval("5") ;
创建表,自增序列表
CREATE TABLE `t_sequence` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT '1',
`create_time` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='序列表,命名s_[table_name]'
两个存储过程函数
DELIMITER $$
USE `wxclouds`$$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE VALUE INTEGER;
SET VALUE = 0;
SELECT current_value INTO VALUE FROM t_sequence WHERE NAME = seq_name;
RETURN VALUE;
END$$
DELIMITER ;
#############################################最主要的是下边这个
DELIMITER $$
USE `wxclouds`$$
DROP FUNCTION IF EXISTS `nextval`$$
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS INT(11)
DETERMINISTIC
BEGIN
DECLARE LASTTIME DATE ;
SELECT create_time INTO LASTTIME FROM t_sequence WHERE NAME = seq_name;
IF TO_DAYS(CURDATE())=TO_DAYS(LASTTIME)
THEN
UPDATE t_sequence SET current_value = current_value + increment, create_time =NOW() WHERE NAME = seq_name;
ELSE
UPDATE t_sequence SET current_value = 0 , create_time =NOW() WHERE NAME = seq_name;
END IF;
RETURN currval(seq_name);
END$$
DELIMITER ;
测试语句
SELECT nextval("5") ;
相关文章推荐
- mysql服务器查询慢原因分析方法
- mysql服务器查询慢原因分析方法
- MySQL(七) —— MySQL存储过程 & 存储引擎
- PHP同时连接多个mysql数据库示例代码
- mysql命令大全
- MySQL中concat函数(连接字符串)
- (重装MySQL)ubuntu中/var/runmysqld/mysqld.sock 问题E: Sub-process /usr/bin/dpkg returned an error code
- mysql 聚集函数 count 使用详解
- MySQL 5.5版本解决中文乱码问题时my.ini内[mysqld]项中不能再写default-character-set=utf8
- mac下mysql的端口号3307修改
- mysql,REPLACE INTO()
- mysql 远程访问-权限
- mysql的基本操作
- mysql创建触发器
- mysql创建触发器
- MyBatis与MySQL交互
- MyBatis与MySQL交互
- MySQL(六) —— 自定义函数
- MySQL连接、删除、创建与调优
- Mysql存储过程