MySQL存储过程和代码分别生成订单号,MySQL拾遗

业务中我们的订单号有几位是一个序列,每天的第一笔订单序列为1,以后每增加一个订单序列+1。每天需要清零。如果是Oracle就可以直接使用Sequence实现。在MySQL中,我们在数据库中设计一个表


表中只有一条记录,通过update_day判断同一天每次sequence+1,第二天的话就更新update_day。


代码实现:

String getOrderSeq() {

//OrderSeq orderSeq = OrderSeq.dao.findById(1);//根据id获取这个记录
OrderSeq orderSeq = OrderSeq.dao.findByType(0);//缴费订单的type=0
long seq = 1;//每天的第一个订单从1开始
Date date = orderSeq.getDate("update_day");
if(DateKit.isToday(date)){//还在今天
seq = orderSeq.getLong("sequence");
orderSeq.set("sequence", seq+1).update();//今天的话就不用更新update_day字段
}else{
orderSeq.set("sequence", seq+1).set("update_day", new Date()).update();//今天的话就不用更新update_day字段
}
return H5ApiConstant.Order.JIAOFEE_FORMAT.format(seq);
}


DateKit类中

public static String toStr(Date date, String format) {
SimpleDateFormat sdf = null;
if(null!=format&&!"".equals(format)){
sdf = new SimpleDateFormat(format);
return sdf.format(date);
}else{
sdf = new SimpleDateFormat(DateKit.dateFormat);
return sdf.format(date);
}
}

private static Date TODAY = new Date();
public static boolean isToday(Date date){
if(toStr(date).equals(toStr(TODAY))){//如果还是今天
return true;
}else{
DateKit.TODAY = new Date();//比较的基础改为今天,因为new Date()表示当前时间
return false;
}
}


使用MySQL存储过程在调用的时候就简单一些了,自己维护sequence和update_day字段。

BEGIN
#Routine body goes here...
#根据类型生成一个订单序列
DECLARE id int;
declare updateDay date;
select o.`id`,o.`sequence`,o.`update_day` into id,orderSeq,updateDay from `order_seq` o where o.`type`=orderType;
if TO_DAYS(updateDay) = TO_DAYS(SYSDATE()) then
 /* 用@符号加变量名的方式定义一个变量,与declare类似 */
update order_seq set sequence=sequence+1 where id=id; 
else
set orderSeq = 1;
update order_seq set sequence=2,update_day=SYSDATE() where id=id; 
end if;
END


存储过程或者函数在copy的过程中,可能出现如下错误:

mysql 1449 : The user specified as a definer ('root'@'%') does not exist

这是由于权限问题导致的:两种解决方案:
1.赋权限
grant all privileges on *.* to root@"%" identified by ".";
flush privileges;

2.改变安全策略


一些关于Mysql的操作

1)将MySQL 添加到服务中。
以管理员模式启动cmd,进入mysql安装路径: d:/appspace/mysql /bin>
输入  mysqld --install MySQL --defaults-file="C:\Windows\my.ini"
要指定defaults-file.
命令行中输入services.msc回车,可以看到MySQL已被添加到Services中,
Path to executable中的内容为 
d:\appspace\mysql\bin\mysqld --defaults-file=C:\windows\my.ini MySQL
2)启动MySQL
在MySQL Service中点击Start按钮,或者在命令行(Run as administrator)中输入 net start mysql.
如果出现1067错误,启动不了,则重新检查my.ini文件(前面有描述)
3)关闭MySQL
在MySQL Service中点击Stop按钮,或者在命令行(Run as administrator)中输入 net stop mysql.
4)删除mysql服务
mysqld –remove
mysql修改密码
对于绿色版的mysql,虽然root用户是默认存在的,但是没有密码,可以通过以下方式修改

命令行下进入mysql的安装目录\bin,输入mysqladmin -u用户名 -p旧密码 password 新密码进行修改。

mysql之间的数据导入导出的时候注意版本之间的区别,5.6.12的数据导入5.5.36不能成功,但是导入5.6.17成功,也基本符合向前兼容性原则。



navicat连接mysql应该是通过网络的方式


访问其他电脑的共享文件使用\\IP地址,要求共享电脑和本电脑在同一个网段,并且有共享的东西。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值