阻止表中出现重复项——SQL UNIQUE 约束
問題:表中存在primary Key ,但是還是有重復項出現(不考慮程序過濾)
例如:
ArticleTags表(是Article和Tags的關聯表)
id(primary key)???????? tag_id???????? article_id
1??????????????????????????????? 327???????????? 1234
2??????????????????????????????? 327?????????????1234
3??????????????????????????????? 327?????????????1234
?
其實SQL Server在表機構上可以約束這種情況發生——UNIQUE
1.給獨立的字段加UNIQUE約束
CREATE TABLE ArticleTags
(
id?? int NOT NULL Primary Key,
tag_id? int NOT NULL,
article_id? int NOT NULL,
UNIQUE(tag_id) ,
UNIQUE(article_id)
)
這個表中tag_id和article_id各自都不允許重復,當然這就不能滿足關聯表的需求
如果我們要求不能有相同的關聯關系存在,那么可以這樣
CREATE TABLE ArticleTags (
id?? int NOT NULL Primary Key,
tag_id? int NOT NULL,
article_id? int NOT NULL,
Constaint ?UniqueRefence? Unique(tag_id,article_id)
?)
?
同樣,在建完表后添加UNIQUE約束
ALTER TABLE ArticleTags
ADD UNIQUE (tag_id)
ADD UNIQUE (article_id)
?
ALTER TABLE ArticleTags
ADD CONSTRAINT UniqueRefence?UNIQUE (tag_id,article_id)
?
撤銷UNIQUE約束
ALTER TABLE ArticleTags
DROP CONSTRAINT UniqueRefence
?
為什么在撤銷里只寫了一個關聯的UNIQUE約束,沒有獨立的?
獨立的貌似要用 DROP CONSTRAINT wbsdfwer,是數據庫自己給他的一個特殊奇怪的id或者名字,當你在重復插入數據的時候,SQL會提示你xx約束blablabla~~~
?
望各位大神指點~~
轉載于:https://www.cnblogs.com/apriljq/archive/2013/06/10/3131085.html
總結
以上是生活随笔為你收集整理的阻止表中出现重复项——SQL UNIQUE 约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简易的信息检索系统
- 下一篇: 让IE6、IE7、IE8支持CSS3的圆