mysql常见的约束类型有哪些
6种mysql常见的约束:
1、非空约束(notnull)
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:所有的类型的值都可以是null,包括int、float等数据类型
2、唯一性约束(unique)
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
3、主键约束(primarykey)PK
主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
4、外键约束(foreignkey)FK
外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的,可以保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。
5、默认值约束(Default)
若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。
6、自增约束(AUTO_INCREMENT)
自增约束(AUTO_INCREMENT)可以约束任何一个字段,该字段不一定是PRIMARYKEY字段,也就是说自增的字段并不等于主键字段。
但是PRIMARY_KEY约束的主键字段,一定是自增字段,即PRIMARY_KEY要与AUTO_INCREMENT一起作用于同一个字段。
当插入第一条记录时,自增字段没有给定一个具体值,可以写成DEFAULT/NULL,那么以后插入字段的时候,该自增字段就是从1开始,没插入一条记录,该自增字段的值增加1。当插入第一条记录时,给自增字段一个具体值,那么以后插入的记录在此自增字段上的值,就在第一条记录该自增字段的值的基础上每次增加1。
也可以在插入记录的时候,不指定自增字段,而是指定其余字段进行插入记录的操作。
mysql的约束有哪些?
1主键约束primarykey
2非空约束notnull
3自定义约束check
4默认约束default
5外键约束foreignkey
本回答由网友推荐
怎样在MySQL中使用检查约束?
在建表的时候不需要设定检查约束,只要把数据类型正确设定就可以了
约束是在程序里控制的,最好是在录入进进行检查,或在写入时进行
检查。只要你董得程序命令功能。错在哪不确定,可能sex是字符型,你用了数字0、1。 可以确定的是,mysql手册里写的很清楚:“所有的存储引擎均对check子句进行分析,但是忽略check子句。”
mysql完整性约束的作用
1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据。
2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率。同时,基于DBMS的完整性控制机制是集中管理的,因此比应用程序更容易实现数据库的完整性。
3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。比如装载大量数据时,只要在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。
4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。当某一列添加了主键约束后,那么这一列的数据就不能重复出现。这样每行记录中其主键列的值就是这一行的唯一标识。例如学生的学号可以用来做唯一标识,而学生的姓名是不能做唯一标识的,因为学习有可能同名。
主键列的值不能为NULL,也不能重复!
指定主键约束使用PRIMARY KEY关键字完整性约束主要有实体完整性约束、参照完整性约束、函数依赖约束、统计约束四类。
实体完整性 实体完整性是指一个关系中所有主属性(即主码的属性)不能取空值。所谓“空值”就是“不知道”或“无意义”的值。如主属性取空值,就说明某个不可标识的实体,这与现实世界的应用环境相矛盾,因此这个实体一定不是完整的实体。
参照完整性约束 参照完整性约束是指参照关系中外码的取值或者是空值(外码的每个属性均为空值)或者是取被参照关系中某个元组的主码值。下面举例说明。现有两个关系模式:学生(学号,姓名,性别,专业号,年龄)和专业(专业号,专业名)。在实现参照完整性时要注意以下几个问题:①外码是否可以接受空值。因为外码能否为空是依赖于应用环境的,如有两个关系模式分别为选修(学号,课程好,成绩)学生(学号,姓名,性别,年龄,所在系),选修关系中的外码“学号”不能为空,如果为空,说明某个不知学号的学生选修了某门课程,这与学校的应用环境不符。②删除被参照关系的原组时的考虑。有时需要删除被参照关系的某个原组,而参照关系中又有若干原组的外码值与被删除的被参照关系中的主码值相对应,这时要进行级联删除,即将参照关系中的所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除,如果参照关系同时又是另一个关系的被参照关系则这种级联删除应该级联删除应该级联下去。③修改被参照关系中主码时的考虑。遇到这种情况时,做法同删除被参照关系的元组类似,要做级联修改,既修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。
函数依赖约束 大部分函数依赖约束都是隐含在关系模式结构中,特别是规范化程度较高的关系模式(如3nf或bcns)都由模式来保持函数依赖。在实际应用中,为了不使信息过于分离,一般不能过分地追求规范化。这样在关系的字段间就可以存在一些函数要显式地表示出来。
系统约束 即某个字段值与一个关系多个元组的统计值之间的约束关系。如,本部门经理的工资不得高于本部门职工的平均工资的5倍。其中职工的平均工资值是一个统计计算值。在许多场合,统计数据往往可以公开,而个别数据却是保密的,但是个别数据值可以从统计数据推断出来,所以要采取一定的防范措施防止数据泄密。
在sql server中,删除外键约束时,将删除强制引用完整性的要求。进行这个操作前需要对表的 alter 权限。
use adventureworks2012;
alter table dbo.docexe
drop constraint fk_column_b;
你可以参考微软官方文档:
标签:关系,参照,外键,约束,完整性,哪个,mysql,主键 From: https://blog.51cto.com/yetaotao/5800702