首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使单据中的字段唯一?

在单据中使字段唯一可以通过以下几种方式实现:

  1. 数据库约束:在数据库层面通过设置唯一约束来保证字段的唯一性。可以在表的创建过程中或者后期通过ALTER TABLE语句添加唯一约束。例如,在MySQL中可以使用UNIQUE关键字来定义唯一约束。具体操作可以参考腾讯云数据库MySQL的文档:UNIQUE约束
  2. 编程验证:在应用程序中通过编程的方式对字段进行验证,确保其唯一性。在插入或更新数据时,先查询数据库中是否存在相同的字段值,如果存在则不允许操作。这种方式需要在应用程序中编写相应的逻辑来实现。例如,在Java开发中可以使用ORM框架如Hibernate或MyBatis来进行数据库操作,并在代码中添加对字段唯一性的验证逻辑。
  3. 唯一标识生成:为字段生成唯一的标识,确保每个字段的值都是唯一的。常见的方式是使用UUID(通用唯一标识符)来生成唯一标识。UUID是一个128位的数字,几乎可以保证全球范围内的唯一性。在应用程序中生成UUID,并将其作为字段的值进行存储。例如,在Python中可以使用uuid模块来生成UUID。
  4. 唯一索引:在数据库中创建唯一索引来保证字段的唯一性。唯一索引是一种特殊的索引,它要求索引列的值在整个表中是唯一的。创建唯一索引后,数据库会自动检查插入或更新的数据是否违反唯一性约束。具体操作可以参考腾讯云数据库的相关文档:创建索引

以上是几种常见的方法来使单据中的字段唯一。根据具体的业务需求和技术栈选择合适的方式来实现字段的唯一性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

接口用例设计

一个系统可为其他系统提供能力或者直接为UI层提供数据,在设计系统测试方案时应考虑上游调用的各种场景,不仅考虑顺利且正向思维操作的场景,还应逆向的场景。例如:人为操作造成的不合理数据、服务错误的调用、请求时由于网络等环境原因造成的异常。但在此之前,也应考虑系统本身稳定性和规范性,应从本身定义约束。定义自身规范,不仅可从一方面保证系统稳定,同时有了自身的介入规范更适用于多业务接入,而不是单独承接某一上游。系统稳定和规范会规避后续更多的BUG。换句话来说,使用契约式设计的方式,运行前条件必须满足,参数不正确不可运行;运行中内部状态必须不变;运行后结果必须保持一致。

03

高并发的核心技术-幂等的实现方案

一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的 三、技术方案 1. 查询操作 查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作 2. 删除操作 删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) 3.唯一索引,防止新增脏数据 比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录 要点: 唯一索引或唯一组合索引来防止新增数据存在脏数据 (当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可) 4. token机制,防止页面重复提交 业务要求: 页面的数据只能被点击提交一次 发生原因: 由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交 解决办法: 集群环境:采用token加redis(redis单线程的,处理需要排队) 单JVM环境:采用token加redis或token加jvm内存 处理流程: 1. 数据提交前要向服务的申请token,token放到redis或jvm内存,token有效时间 2. 提交后后台校验token,同时删除token,生成新的token返回 token特点: 要申请,一次有效性,可以限流 注意:redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用 5. 悲观锁 获取数据的时候加锁获取 select * from table_xxx where id='xxx' for update; 注意:id字段一定是主键或者唯一索引,不然是锁表,会死人的 悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际情况选用 6. 乐观锁 乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相对于悲观锁,效率更高。 乐观锁的实现方式多种多样可以通过version或者其他状态条件: 1. 通过版本号实现 update table_xxx set name=#name#,version=version+1 where version=#version# 如下图(来自网上):

03

高并发的核心技术-幂等的实现方案

我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的 三、技术方案 1. 查询操作 查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作 2. 删除操作 删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) 3.唯一索引,防止新增脏数据 比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录 要点: 唯一索引或唯一组合索引来防止新增数据存在脏数据 (当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可) 4. token机制,防止页面重复提交 业务要求: 页面的数据只能被点击提交一次 发生原因: 由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交 解决办法: 集群环境:采用token加redis(redis单线程的,处理需要排队) 单JVM环境:采用token加redis或token加jvm内存 处理流程: 1. 数据提交前要向服务的申请token,token放到redis或jvm内存,token有效时间 2. 提交后后台校验token,同时删除token,生成新的token返回 token特点: 要申请,一次有效性,可以限流 注意:redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用 5. 悲观锁 获取数据的时候加锁获取 select * from table_xxx where id='xxx' for update; 注意:id字段一定是主键或者唯一索引,不然是锁表,会死人的 悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际情况选用 6. 乐观锁 乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相对于悲观锁,效率更高。 乐观锁的实现方式多种多样可以通过version或者其他状态条件: 1. 通过版本号实现 update table_xxx set name=#name#,version=version+1 where version=#version# 如下图(来自网上):

04

金蝶K3序时簿页面增加物料即时库存显示功能

K3默认序时簿是不体现即时库存的,如果需要在序时簿将物料的即时库存数据带入,可以按照下方的步骤实现: 本文以销售订单序时簿增加即时库存为例,其他单据以此方法参考即可。 如果希望在订单新增环节体现物料即时库存,参见另外一篇文章https://blog.csdn.net/hzfw2008/article/details/77461406 一、步骤 1、 创建视图,按物料合计库存。 2、 获取目标序时簿typeid 3、 修改序时簿关联关系表ICTableRelation,追加与即时库存关联关系 4、 修改序时簿字段表ICChatBillTitle,追加显示即时库存字段。 5、 序时簿过滤器中显示隐藏列中勾选显示库存字段。 二、涉及到的表介绍: 序号 表名 表功能 1 ictransactiontype 单据业务类型表 2 iclisttemplate 序时簿模版表 3 ICTableRelation 序时簿所有表之间的连接关系 4 ICChatBillTitle 序时簿显示字段表 三、分步骤实现: 1、 创建库存合计视图vw_rtstock。

02

DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则

简要介绍          在我们进行数据库设计的时候,大家都会考虑到数据表主键的设计,而可能没有人去关注记录唯一性字段设计,或者说,很多开发人员把这两种混合在一起处理,即就是表记录的唯一性与主键相结合的技术,因为从本质上讲,表主键的值是必须唯一的,他即能确保表记录的唯一性。          我在本文提出的思路是分离表记录的唯一性与主表键的设计,也可以理解为是双主键的设计思路,即唯一性设计可以与表业务无关,而表主键的设计必须与业务相关联,一个主键记录一定能具有一定的业务意义。 主键设计的争议

05
领券