作者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/m.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