唯一性约束和唯一性索引和约束的区别的区别

查看: 7430|回复: 7
什么是唯一键,跟唯一索引有什么区别
论坛徽章:0
刚看到一个表除了有主键和外键以外,还有一个唯一键,生成了它的创建SQL语句出来,发现是唯一性约束的创建语句
请问唯一键跟一般的唯一性约束有什么区别呢?
招聘 : 论坛徽章:54
论坛徽章:23
是 sql server2005么?
论坛徽章:6
唯一键和唯一索引相同点都确保了,制定字段内容不会出现重复的值。
区别是唯一键不是索引。唯一索引是索引额度一种。
论坛徽章:6
而且如果某一字段设定为唯一索引的话,在往该表插入数据时,会判断要插入的数据是否在该字段上有重复,又重复就不给插入。
除非是制定IGNORE_DUP_KEY ,不重复的记录才被插入。
论坛徽章:0
原帖由 smthgdin 于
14:19 发表
唯一键和唯一索引相同点都确保了,制定字段内容不会出现重复的值。
区别是唯一键不是索引。唯一索引是索引额度一种。
应该是他说的这样,一般带唯一键都是簇集索引,有点像新华字典里的字根表,更容易更快的查找到数据!
论坛徽章:6
原帖由 linger505 于
21:40 发表
应该是他说的这样,一般带唯一键都是簇集索引,有点像新华字典里的字根表,更容易更快的查找到数据!
我的理解是唯一索引是非簇索引。
招聘 : 论坛徽章:54
学习一下.. 呵呵
LS的理解也许容易普及...
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号问题:MySQL中什么是禁用唯一性检查?唯一性检查,唯一性约束条件,唯一性索引之间的区别是什么?
描述:MySQL中,插入数据时会对数据进行唯一性检查。这种唯一性检验也会降低插入数据的速度。为了能优化插入记录的速度,可以在插入数据前禁用唯一性检查,等到插入数据完毕后在开启。。。我做了以下两次测试。在关闭了唯一性检查后为什么不能插入相同的数据????
测试1,先创建唯一性约束条件,再禁用唯一性检查(如图):
测试2,先创建唯一性索引,再禁用唯一性检查(如图):
两次测试中我都禁用了唯一性检查,为什么最后不能够插入相同的id 值呢?求大神解释一下,晚生在这谢谢了。。。。解决方案1:禁用以后,最好重启一下mysql等看看是否条件已经设置成功了解决方案2:解决方案3:解决方案4:表要纠结了,实用为王,过多的特性其实也就是一种负担。解决方案5:我也测试了你的命令,的确是没有效果的。楼主求真务实的精神,值得称赞!
只能说开源技术也是有缺陷的,这也是mysql不断再更新新版本的原因。解决方案6:mysql的唯一性检查,其实这是mysql的一个bug,在它的官网上已经发表了,测试方法就是你给的这样的。
官方说明unique_checks其实是没有效果的。原文链接为:/bug.php?id=6357
所以呢,楼主就不要纠结这个属性的作用了。
以上介绍了“MySQL中什么是禁用唯一性检查?唯一性检查,唯一性约束条件,唯一性索引之间的区别是什么?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/wd/575399.html
上一篇: 下一篇:温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
love your life:)
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
唯一性约束1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并不是表的主键列。(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。主键: 1) 用于标识某行而且与之相关. 2) 是不可能(或很难)更新. 3) 不应该允许空(NULL). 唯一域/字段: 1) 用于作为访问某行的可选手段.2) 只要唯一就可以更新. 3) 可以为空(NULLs). 注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。
阅读(1461)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'主键,外键,唯一,约束区别',
blogAbstract:'
什么是主键?
在数据库中,常常不只是一个表,这些表之间也不是相互独立的。不同的表之间需要建立一种关系,才能将它们的数据相互沟通。而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的。通过这个字段中不同的值可以区别各条记录。就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人。数据库的表中作为主键的字段就要像人的身份证号一样,必须是每个记录的值都不同,这样才能根据主键的值来确定不同的记录。
什么是外键? foreignkey 说明你的表A中的某项a,是引用表B的某列b 为什么要使用外键? RDBMS的基本概念,可以维护数据库的完整。 ',
blogTag:'oracle,转贴',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'love your life:)',
hmcon:'-1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}博客访问: 92919
博文数量: 46
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
主键、唯一键约束、唯一索引区别之创建
主键、唯一键约束、唯一索引区别之删除
一:查看一下字典表中,约束的情况SCOTT@ORA11GR2>select constraint_name,constraint_type,table_name,status from user_constraints where table_name=upper('student');CONSTRAINT_NAME & & &CONSTRAINT_TYPE TABLE_NAME & & &STATUS-------------------- --------------- --------------- --------PK_STUDENT_SNO & & & P & & & & & & & STUDENT & & & & ENABLEDUK_STUDENT_SNAME & & U & & & & & & & STUDENT & & & & ENABLEDSCOTT@ORA11GR2>二:查看一下字典表中,索引的情况SCOTT@ORA11GR2>select table_name,column_name,index_name from user_ind_columns where table_name=upper('student');TABLE_NAME & & &COLUMN_NAME & & INDEX_NAME--------------- --------------- --------------------STUDENT & & & & SNO & & & & & & PK_STUDENT_SNOSTUDENT & & & & SNAME & & & & & UK_STUDENT_SNAMESTUDENT & & & & IDCARD & & & & &UIDX_STUDENT_IDCARDSCOTT@ORA11GR2>SCOTT@ORA11GR2>select index_name,uniqueness,tablespace_name,status from user_indexes where table_name=upper('student');INDEX_NAME & & & & & UNIQUENES TABLESPACE_NAME STATUS-------------------- --------- --------------- --------UIDX_STUDENT_IDCARD &UNIQUE & &USERS & & & & & VALIDUK_STUDENT_SNAME & & UNIQUE & &USERS & & & & & VALIDPK_STUDENT_SNO & & & UNIQUE & &USERS & & & & & VALIDSCOTT@ORA11GR2>SCOTT@ORA11GR2>select constraint_name,constraint_type,table_name,status from user_constraints where table_name=upper('student');CONSTRAINT_NAME & & &CONSTRAINT_TYPE TABLE_NAME & & &STATUS-------------------- --------------- --------------- --------PK_STUDENT_SNO & & & P & & & & & & & STUDENT & & & & ENABLEDUK_STUDENT_SNAME & & U & & & & & & & STUDENT & & & & ENABLEDSCOTT@ORA11GR2>三:将主键、唯一键、唯一索引diableSCOTT@ORA11GR2>alter table student disable constraint uk_student_Table altered.SCOTT@ORA11GR2>alter table student disable constraint pk_student_Table altered.SCOTT@ORA11GR2>alter index uidx_student_alter index uidx_student_idcard disable*ERROR at line 1:ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW optionSCOTT@ORA11GR2>将索引disable报错,官方文档有这么一句话DISABLE applies only to a function-based index. 也就是说,disable只适用基于函数的索引,所以,想让索引失效需要使用unusable,如下:alter index uidx_student_idcard unusable;Index altered.SCOTT@ORA11GR2>四:再次查看字典表中关于约束的相关信息两个主键和唯一键都编程disable状态SCOTT@ORA11GR2>select constraint_name,constraint_type,table_name,status from user_constraints where table_name=upper('student');CONSTRAINT_NAME & & &CONSTRAINT_TYPE TABLE_NAME & & &STATUS-------------------- --------------- --------------- --------PK_STUDENT_SNO & & & P & & & & & & & STUDENT & & & & DISABLEDUK_STUDENT_SNAME & & U & & & & & & & STUDENT & & & & DISABLEDSCOTT@ORA11GR2>五:再次查看字典表中关于索引的相关信息发现,之前两个约束创建的索引已消失,唯一索引的状态也变为失效状态SCOTT@ORA11GR2>select table_name,column_name,index_name from user_ind_columns where table_name=upper('student');TABLE_NAME & & &COLUMN_NAME & & INDEX_NAME--------------- --------------- --------------------STUDENT & & & & IDCARD & & & & &UIDX_STUDENT_IDCARDSCOTT@ORA11GR2>select index_name,uniqueness,tablespace_name,status from user_indexes where table_name=upper('student');INDEX_NAME & & & & & UNIQUENES TABLESPACE_NAME STATUS-------------------- --------- --------------- --------UIDX_STUDENT_IDCARD &UNIQUE & &USERS & & & & & UNUSABLESCOTT@ORA11GR2>六:使约束及索引生效注:索引需要rebuild的方式使其生效SCOTT@ORA11GR2>alter table student enable constraint uk_student_Table altered.SCOTT@ORA11GR2>alter table student enable constraint pk_student_Table altered.SCOTT@ORA11GR2>alter index uidx_student_Index altered.SCOTT@ORA11GR2>七:最后再查看字典表中关于约束的相关信息SCOTT@ORA11GR2>select constraint_name,constraint_type,table_name,status from user_constraints where table_name=upper('student');CONSTRAINT_NAME & & &CONSTRAINT_TYPE TABLE_NAME & & &STATUS-------------------- --------------- --------------- --------PK_STUDENT_SNO & & & P & & & & & & & STUDENT & & & & ENABLEDUK_STUDENT_SNAME & & U & & & & & & & STUDENT & & & & ENABLEDSCOTT@ORA11GR2>八:最后再查看字典表中关于索引的相关信息SCOTT@ORA11GR2>select table_name,column_name,index_name from user_ind_columns where table_name=upper('student');TABLE_NAME & & &COLUMN_NAME & & INDEX_NAME--------------- --------------- --------------------STUDENT & & & & SNAME & & & & & UK_STUDENT_SNAMESTUDENT & & & & SNO & & & & & & PK_STUDENT_SNOSTUDENT & & & & IDCARD & & & & &UIDX_STUDENT_IDCARDSCOTT@ORA11GR2>SCOTT@ORA11GR2>select index_name,uniqueness,tablespace_name,status from user_indexes where table_name=upper('student');INDEX_NAME & & & & & UNIQUENES TABLESPACE_NAME STATUS-------------------- --------- --------------- --------UIDX_STUDENT_IDCARD &UNIQUE & &USERS & & & & & VALIDPK_STUDENT_SNO & & & UNIQUE & &USERS & & & & & VALIDUK_STUDENT_SNAME & & UNIQUE & &USERS & & & & & VALIDSCOTT@ORA11GR2>小结:1)将主键约束唯一键约束diable的时候,那么相应的索引也将自动删除;2)将唯一索引unusable以后,索引还在,只是将其不可用,使其可用,使用rebuild;3)主键和唯一键约束enable以后,相应的索引也将自动创建。
阅读(1363) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 索引和约束的区别 的文章

 

随机推荐