作为一个用了好几年oracle开发的码农,竟然忘记约束和索引的区别,好尴尬,赶紧补充下自己
一、五大约束
1、主键约束(Primay Key Coustraint) 唯一性,非空性
2、唯一约束 (Unique Counstraint)唯一性,可以空
3、检查约束 (Check Counstraint)对该列数据的范围、格式的限制(如:年龄、性别等)
4、默认约束 (Default Counstraint)该数据的默认值
5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列
详解:https://blog.csdn.net/ShyTan/article/details/115748370
二、索引(这里只讲唯一索引,因为我也没用过别的)
1、唯一索引是一种实体,应当只用来提高查询的性能
2、创建主键的同时会创建一个唯一索引
详解:https://blog.csdn.net/ShyTan/article/details/115748519
三、主键与唯一索引区别
- 主键是一种约束,目的是对这个表的某一列进行限制;
- 唯一索引是一种索引,索引是数据库表的一个冗余结构,目的是为了更好的查询;
- 主键列不允许为空值,而唯一性索引列允许空值;
- 一个表最多只能一个主键,但是可以包含多个唯一索引;
四、生效规则
1、约束是在事务结束的时候执行;
2、索引是立即执行,而不管事务状态或引擎的日志模式。
五、注意事项
在使用约束的时候,不要删除约束创建的索引。不要试图通过sysconstraints表的数据行来删除约束,一定要通过alter语句来实现。
你可以在一个表上先创建唯一索引,然后再创建约束,反过来却不可以。