由于在做压力测试,同一时间占用的问题。

两个用户同时下同一时间的订单,需要增加校验,第一个能保存的用户保存,第二个就不能让保存了。

问题是通过代码,怎么都做不到毫秒级校验,所以解决办法就只能是通过数据库的唯一校验了。

首先是把指定的两个字段增加唯一约束,我的场景是选择的美发师和预约的时间两个字段

ALTER TABLE PaasOLT_Order ADD CONSTRAINT BarberTimeUni unique(BarberId,ServiceTime)

第一个语句就碰壁了,报错

真尴尬,好奇怪的报错,经过调查发现

想要设置成唯一性约束的字段,不能是NVARCHAR(MAX)的,索引的键不能超过 900字节的总大小。将数据类型更改为 NVARCHAR(450)

好吧,那就改下吧

ALTER TABLE PaasOLT_Order ALTER COLUMN BarberId nvarchar(32) NULL;

继续尴尬,还是报错

这个就比较好理解了,就跟你在后期修改一个字段为非空字段的时候,得保证这个列的值都不能是null,并且也不能重复。

至于解决这个问题,就得给现有的数据改成非空。

update PaasOLT_Order set BarberId = (select id from sysUser su where su.truename = paasolt_order.servicename)
where BarberId is null update PaasOLT_Order set BarberId = Id
where BarberId is null update PaasOLT_Order set ServiceTime = CONVERT(varchar(100), CreateTime, 120)
where ServiceTime is null

空的问题解决了,还有之前垃圾数据,有重复的。

再处理下,把之前重复的数据清掉

SQL 建立多个字段唯一性校验的更多相关文章

  1. SQL 把表中字段存储的逗号隔开内容转换成列表形式

    原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...

  2. 使用AJAX实现用户名的唯一性校验(注册界面)-JAVA(新手)

    (1)实现用户名的唯一性校验 所需要准备的: Servlet 注册界面的JSP 接口和实现类 所需要的接口和实现类: 接口: /* * 用户注册 * 账号的唯一性校验,需要传参(username) * ...

  3. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

  4. SQL Server对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  5. 向已写好的多行插入sql语句中添加字段和值

    #region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...

  6. sql 给数据库表 字段 添加注释

    最近发现一些代码生成器 有针对注释做一个很好的转化,之前建表的时候 没有这块的注释.现在想增加,专门去看了下 如何增加注释 1 -- 表加注释 2 EXEC sys.sp_addextendedpro ...

  7. DWZ 框架remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题

    关于jquery  remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题.可以直接修改tomcat 配置文件server.xml  设置 URIEncoding=utf-8属性,将ge ...

  8. SQL语句更新时间字段的年份、月份、天数、时、分、秒

    SQL语句更新时间字段的年份.月份.天数.时.分.秒 --修改d表日期字段的年份update dset birth=STUFF(convert(nvarchar(23),birth,120),1,4, ...

  9. 使用 SQL Server 的 uniqueidentifier 字段类型

    原文:使用 SQL Server 的 uniqueidentifier 字段类型 SQL Server 自 2008 版起引入了 uniqueidentifier 字段,它存储的是一个 UUID, 或 ...

随机推荐

  1. pta编程(1-8)

    知识点:本次编程运用到的格式 #include<stdio.h> int main(void) { printf(); return 0; } 过程:1-3.没什么问题,就是注意字符的输入 ...

  2. 【工作感悟】——揭开“PM”的面纱

    [前言] 上次跟大家分享了面试的故事,小编觉得效果还不错,因此小编决定把工作感悟系列写下去,不过时间就不好说了.希望小伙伴们在评论列表中发表自己的看法和观点,积极参与啦~~ [背景] 初来Y公司,作为 ...

  3. ASP.NET MVC如何使用输出缓存

    通过这篇文章你将学习到在MVC中如何使用输出缓存,业务逻辑我就不多介绍了,主要是Outputcache的基本使用.至于数据缓存还是等我的下一篇文章吧,一步一步来不急的.   输出缓存的使用方法是在Co ...

  4. [转]掌握 Dojo 工具包,第 2 部分: XHR 框架与 Dojo

    作者:secooler 快乐的DBA Ajax 的兴起改变了传统的 B/S 结构应用程序中以页面为单位的交互模式,Ajax 引入的局部刷新机制带来了更好的用户体验,促使浏览器中的页面开始向应用程序发展 ...

  5. 对于response.setContentType(MIME)的解释

    response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据.例如web浏览器就是通过MIM ...

  6. SRM708 div1 PalindromicSubseq(动态规划+容斥原理)

    题目大意:给定一个字符串,记X[i]为包含s[i]这个字符的所有子列是回文串的个数(注意是子列而不是子串),求出所有的X[i]*(i+1),然后异或起来作为返回结果 题解: 首先用容斥来想,如果当前枚 ...

  7. 深入理解Netscaler INat

    深入理解Netscaler INat http://blog.51cto.com/caojin/1898173 Netscaler的INat主要是用作基于目的地址的转换,将client访问的公网IP通 ...

  8. BZOJ 1101 [POI2007]Zap | 第一道莫比乌斯反(繁)演(衍)

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1101 题解: http://www.cnblogs.com/mrha/p/8203612.h ...

  9. hdu 6203 ping ping ping(LCA+树状数组)

    hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...

  10. [Leetcode] container with most water 最大水容器

    Given n non-negative integers a1 , a2 , ..., an , where each represents a point at coordinate (i, ai ...