作者LaPass (LaPass)
看板Database
标题Re: [SQL ] 栏位A AND 栏位B 不得重复
时间Mon Nov 24 11:05:05 2014
※ 引述《brocker (别问我居士)》之铭言:
: 资料库名称:MSSQL
: 资料库版本:2012
: 想请问一下大大们,我今天有一个资料表,要新增内容进去,里面有两个栏位,栏位A和栏位B
: 栏位A的资料内容可以重复
: 栏位B的资料内容也可以重复
: 但是栏位A和栏位B的内容 新增下一笔时不能跟这两栏同时一样
: 也就是说栏位A(姓名)有一笔叫王小明 栏位B(打卡日期)是2014/9/9
: 姓名或是栏位单独的时候可以重复
: 但是一起的时候不能重复
: 请问一下这样条件约束(Constraint)要怎麽设定,谢谢!
ALTER TABLE `表名称` ADD UNIQUE `索引名称` ( `A` , `B` );
A可重复
B也可重复
但是A跟B同时重复的时候,就会跟你讲说已经有这个索引,塞不进去
还有我记得主键也可以同时设定在两个栏位上
运作方式同上,会把两个栏位一起判断
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.219.211
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1416798308.A.0BE.html
1F:推 BigLoser: 请问,A:小明 B:NUL 加入这样的资料两笔,加的进去吗? 11/24 12:00
2F:推 BigLoser: 我把来也是想说把两个加起来设成为一值就好了 11/24 12:50
3F:→ BigLoser: 可是我上面说的A栏位有值B栏位NULL 11/24 12:50
4F:→ BigLoser: 如果已经有一笔这样的资料,第二笔在进去的时候应该 11/24 12:51
5F:→ BigLoser: 会失败吧,这样应该就不符合原PO条件 11/24 12:51
6F:→ LaPass: 应该不能加没错,不过不是说不允许A、B都一样的状况吗?那 11/24 13:26
7F:→ LaPass: 当然包跨NULL 11/24 13:27
8F:推 BigLoser: 因为我看到原问题有一个"姓名或是栏位单独的时候可以重 11/24 14:29
9F:→ BigLoser: 复",我还以为她希望可以有两笔小明,而没有日期 11/24 14:29
10F:→ BigLoser: 或许我太执着於这一点的,应该先厘清原问题 11/24 14:29
11F:→ BigLoser: 那这个解法应该就没问题,那我可以延伸这题请教一下 11/24 14:31
12F:→ BigLoser: 如果是可以有两笔 小明, NULL这种状况该怎麽解? 11/24 14:31
13F:→ LaPass: 应该也只能在insert之前下判断式了吧 11/24 14:53
14F:→ LaPass: 或是你讲的trigger 11/24 14:54
15F:推 BigLoser: 嗯..也就是约束条件做不到吗? 因为我不知道怎麽做 11/24 15:00
16F:→ BigLoser: 只好用trigger 11/24 15:00