mysql 自动定义序号:用来做"定单号"

自动定义序号:用来做"定单号"

总会有这样的需求,只是可能你没有遇到而已。我举个例子:若订单号的生成格式为“日期+序号”

(先不管需求是不是很傻逼),就像这样:2015052200001234,这个该如何处理呢?

若是有序列号,就比较好解决了。从00000001开始,到99999999,然后重置为一下序列,就OK啦。

-- 定义序列表

DROP TABLE IF EXISTS sequence;

CREATE TABLE sequence (

name VARCHAR(50) NOT NULL,

current_value INT NOT NULL,

increment INT NOT NULL DEFAULT 1,

PRIMARY KEY (name)

) ENGINE=InnoDB;

-- 获取当前序列号

DROP FUNCTION IF EXISTS currval;

DELIMITER $

CREATE FUNCTION currval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

DECLARE value INTEGER;

SET value = 0;

SELECT current_value INTO value

FROM sequence

WHERE name = seq_name;

RETURN value;

END$

DELIMITER ;

-- 获取下一个序列号

DROP FUNCTION IF EXISTS nextval;

DELIMITER $

CREATE FUNCTION nextval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence SET current_value = current_value + increment

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

-- 重设序列号

DROP FUNCTION IF EXISTS setval;

DELIMITER $

CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence SET current_value = value

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

-- 初始化数据

INSERT INTO sequence VALUES (‘SAMPLE‘, 1, 1);

-- 测试

SELECT currval(‘SAMPLE‘);

SELECT nextval(‘SAMPLE‘);

SELECT nextval(‘SAMPLE‘);

SELECT setval(‘SAMPLE‘,150);

SELECT currval(‘SAMPLE‘);

SELECT nextval(‘SAMPLE‘);

SELECT nextval(‘SAMPLE‘);

时间: 2024-10-03 18:54:20

mysql 自动定义序号:用来做"定单号"的相关文章

利用"SQL"语句自动生成序号的两种方式

1.首先,我们来介绍第一种方式: ◆查询的SQL语句如下: select row_number() over (order by name) as rowid, sysobjects.[name] from sysobjects ◆运行的结果: rowid   name 1           all_columns 2           all_objects 3           all_parameters 4           all_sql_modules 5          

java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux

相信很多朋友都经历过数据库出问题的情况,我也同样(见我的上一篇博文:phpmyadmin误删表后的恢复过程(心惊胆跳啊)   ).如果数据很大或者很重要,那么恢复起来是相当困难的,所以我们在做一个相对完善的系统时,数据库的备份/还原功能是必不可少的.本文将在javaEE环境下实现MySQL的自动备份/还原,使用了struts2和hibernate框架,MySQL版本是5.1.16. 下图展示的是web application的执行流程, Timer是在一个随着application启动而启动的s

通过MySql自动同步刷新redis

在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家伙简直可以用“男女搭配,干活不累”来形容,搭配起来使用才能事半功倍.本篇我们就这两者如何合理搭配以及他们之间数据如何进行同步展开. 一般地,Redis可以用来作为MySQL的缓存层.为什么MySQL最好有缓存层呢?想象一下这样的场景:在一个多人在线的游戏里,排行榜.好友关系.队列等直接关系数据的情景

mysql自动安装脚本

为适应自己工作习惯和需要,花一点时间写了一个mysql自动安装脚本,供大家参考学习. 注意: 1.需要先安装cmake 2.数据库版本需要在第二步安装mysql时修改 3.该脚本是以root用户安装并启动 脚本内容如下: ######################################################################## #mysql自动安装脚本,其中变量/mysql_v_dir/和/port/可根据实际需要修改    # #执行脚本命令:sh mys

使用shell实现mysql自动全备、增备&日志备份

数据库热备脚本: vim backup.sh #!/bin/sh time=`date "+%Y%m%d_%H%M%S"` host=`hostname` week=`date +%w` monitor="/home/mysql/monitor/mysql_hotbackup_status.txt" ##zabbix监控文件 time_start=`date +%s` n=0 ###要周几做全备,周日是0,周一到周六依次为1~6 function check_sta

mysql 自动备份和nginx自动安装脚本

一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if [

MYSQL自动备份并发送邮件工具

最近在开发小程序,由于服务器只有一台,所以不能数据库异机备份,出于数据安全的考虑,就做了一个数据库定时备份并发送邮件到自己的邮箱的小工具,先看下工具界面 这个工具主要涉及到三个部分 1.MYSQL自动备份 2.发送邮件 3.定时任务 MYSQL备份可以通过调用mysqldump命令从而来进行备份,这里提供一个命令大全:https://www.jb51.net/article/135724.htm 这里因为工具运行在服务器,所以连接ip和端口就默认为localhost和3306,直接上代码 发送邮

mysql自动备份维护shell脚本

/opt/backup_online.sh #!/bin/bash#功能说明:本功能用于备份数据库 #数据库用户名dbuser='root'#数据库密码dbpasswd='zLaaa'#数据库名,可以定义多个数据库,中间以空格隔开,如:test test1 test2dbname='adb bdb '#备份时间backtime=`date +%Y%m%d%H%M%S`#日志备份路径logpath='/opt/garbageBackup/'#数据备份路径datapath='/opt/garbage

[转]mysql自动定时备份数据库的最佳方法-支持windows系统

网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作. 我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自动有备份呢? 这个方法是用bat批处理来完成的. 假想环境:MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如图: 数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db