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.配置数据源 完成!
随机推荐
- Oracle内连接、外连接、右外连接、全外连接小总结
数据库版本:Oracle 9i 表TESTA,TESTB,TESTC,各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 ...
- eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced
eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced jre 换成6的就好了选 ...
- Mysql索引分析:适合建索引?不适合建索引?【转】
数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特 ...
- 基于esp8266的智能台灯DIY
研究esp8266已经很久了,特制作了一个智能灯, 代码如下,总结几点 一.关于arduino pro mini 的烧写方法 一定要在编译成功之后的下载提示出现的瞬间,单击复位按钮.才可进入烧写 二. ...
- python3 第十三章 - 数据类型之tuple(元组)
元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可: language = ('c', 'c++', 'py ...
- 捕获arm托管磁盘虚拟机,并进行还原
背景:托管磁盘虚拟机"hlmma69n2",附加了一块100GB的数据磁盘.可以通过Portal管理界面直接捕获该虚拟机并进行还原,详情见如下步骤: 1.在虚拟机内部执行一般化的操 ...
- Python--socketserve源码分析(一)
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass 实现原理: s =socketserver.ThreadingTCPServer(参 ...
- WebSphere--会话跟踪
Web应用服务器具有会话跟踪(即跟踪用户请求)的功能.使用管理器的"会话跟踪"页面配置会话跟踪.会话跟踪程序可将同一用户的几个相关请求合并为单个会话(即一个 HttpSession ...
- java 常见的几种运行时异常RuntimeException
常见的几种如下: NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常.IllegalArgumentException - 传递 ...
- angular中要注意的指令
1.ng-repeat 遍历集合,给每个元素生成模板实例,每个实例的作用域中可以用一些特殊属性,如下: $index //遍历集合的下标 $first //遍历集合中的第一个对象 $last //遍历 ...