MySql主键自动生成,表、实体、C#调用方法
1.表:mysql建表语句
DROP TABLE IF EXISTS `keycode`;
CREATE TABLE `keycode` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`KeyName` varchar(50) NOT NULL,
`KeyRemark` varchar(100) NOT NULL,
`Prefix` varchar(20) DEFAULT NULL,
`ReSetType` int(11) NOT NULL,
`DateFormat` longtext,
`Length` int(11) NOT NULL,
`Step` int(11) NOT NULL,
`InitialValue` int(11) NOT NULL,
`NowDate` longtext,
`CurrentValue` int(11) NOT NULL
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
2.实体:Entity
/// <summary>
/// 自动生成不重复流水号
/// </summary>
public class KeyCode
{
/// <summary>
/// 键名称
/// </summary>
[Required, MaxLength()]
public string KeyName { get; set; } /// <summary>
/// 键说明
/// </summary>
[Required, MaxLength()]
public string KeyRemark { get; set; } /// <summary>
/// 前标字母
/// </summary>
[MaxLength()]
public string Prefix { get; set; } /// <summary>
/// 重置类型:0不重置 1重置
/// </summary>
public int ReSetType { get; set; } /// <summary>
/// 日期格式 日期格式格式可以是yyyymm,yy-mm,yyyymmdd,yyyymmdd-hh等,
/// 如果按年重置,则日期格式中必须有年,如果按月重置,则日期格式中必须有月.
/// 如果日期格式为空:则编号中不加入日期字段
/// </summary>
public string DateFormat { get; set; } /// <summary>
/// 流水号长度:如长度为4,当前流水号为123,则出来的编码为0123,不足4位的前面补0
/// </summary>
public int Length { get; set; } /// <summary>
/// 步长 每个流水号生成间隔是多少,如2,表示每个生成0001,0003这种流水号';
/// </summary>
public int Step { get; set; } /// <summary>
/// 初始值 初始流水号是多少,默认是0
/// </summary>
public int InitialValue { get; set; } /// <summary>
/// 当前使用的日期【需更新】
/// </summary>
public string NowDate { get; set; } /// <summary>
/// 当前流水号【需更新】 流水号当前值,如234表示当前的流水号生成到了234,下一个为234+STEP(步长)';
/// </summary>
public int CurrentValue { get; set; } }
3.C#调用方法
/// <summary>
/// 不重复编码生成
/// </summary>
/// <param name="keyName"></param>
/// <returns></returns>
public string GetKeyCode(string keyName)
{
string returnKey = "";
KeyCode key = _keyRepository.FirstOrDefault(k => k.KeyName == keyName);
//步长
int step = key.Step <= ? : key.Step; //如果日期格式化为空:表示编码不需要日期
if (string.IsNullOrEmpty(key.DateFormat))
key.NowDate = "";
else
key.NowDate = DateTime.Now.ToString(key.DateFormat); //重置类型: 0不重置,1重置
//不重置:后面序号一直增加,不按年月日重置
if (key.ReSetType == )
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
//重置:年月日变化时,会重新从1开始
else
{
//如果日期不一样了,序号从1开始
if (!string.IsNullOrEmpty(key.NowDate) &&key.NowDate != DateTime.Now.ToString(key.DateFormat))
key.CurrentValue = key.InitialValue <= ? : key.InitialValue;
//否则,序号从原序号+step
else
key.CurrentValue = key.CurrentValue <= ? : (key.CurrentValue + step);
} //更新当前值为新的值;
_keyRepository.Update(key);
//拼接编码
string newCode = key.CurrentValue.ToString().PadLeft(key.Length, '');
returnKey = key.Prefix + key.NowDate + newCode;
return returnKey;
}
MySql主键自动生成,表、实体、C#调用方法的更多相关文章
- PowerDesigner 15设置mysql主键自动增长及基数
PowerDesigner 15设置mysql主键自动增长及基数 1.双击标示图,打开table properties->columns, 如图点击图标Customize Columns an ...
- hibernate主键自动生成
Entity类中,主键尽量使用可以为null值的类型,比如Integer,Long,String等,不要用int,long等.因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态( ...
- MYSQL主键自动增加的配置及auto_increment注意事项
文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二: 点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...
- Mybatis「MySQL-Oracle」 中主键自动生成 <selectKey> 序列化
有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...
- SQL Server主键自动生成_表and存储过程
主键表: CREATE TABLE [dbo].[KEYCODE]( [KeyName] [varchar](12) NOT NULL, [KeyTableName] [varchar](40) NU ...
- Entity Framework Code First 遭遇主键自动生成问题
4.0后就没有去跟踪后面的版本了.现在直接开始用5.0没想到在做User的GURD时就遭遇insert不进数据问题. ISet<User>.Add(user);_context.SaveC ...
- mysql——主键自动增长&唯一索引
首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们 ...
- Oracle主键自动生成_表and存储过程
-- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid ...
- springboot 使用JPA自动生成Entity实体类的方法
1. 2. 3.添加数据库 4. 5. 6. 7.点击OK完成. 8.去掉红色波浪线方法. 9.配置数据源 完成!
随机推荐
- Redis 数据结构与内存管理策略(下)
Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- destoon_笔记
{mb_substr($shop_type[catname],0,4)} {dsubstr($v['company'],18)} =================================== ...
- Aliase_小白学Python_Day0_前言
听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...
- sqlite效率探测
在编译后当然就是使用sqlite,贸贸然去测试了一下创建数据库,插入数据,仅几条数据,发现,真不错的数据库,后来把数据量提高到10000的 时候,发现,怎么这么慢,后来自己都受不了,网上一查,原来是如 ...
- JVM核心之JVM运行和类加载全过程
为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...
- js截取字符串的方法
1,slice(a, b) 第一个参数表示起始位置,第二个表示截取到但不包含 关于参数正负问题,只要记住一点:永远不能倒着截取!否则返回空字符串 2,substring(a, b) 第一个参数表示起始 ...
- Python-Blog1-搭建开发环境
注:本系列是根据廖雪峰python实战过程,详情可见(https://www.liaoxuefeng.com/) 环境准备 Python 版本:Python 3.X,查看python版本python ...
- X86寄存器全称
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- scss 初学笔记 二 混合宏
混合宏 格式 @mixin 定义混合宏 (相当于变量声明 var $ ?) //不带参数混合宏 @mixin borderRadius{ -webkit-border-radius: 5px; b ...
- springmvc配置文件配置的事务作用范围
作用于service,不是controller,也不是mapper.所以,要保证原子性,就放在一个serviceimpl里,而不要放在一个controller 里 第一次与数据库打交道时,事务开启,s ...