mysql约束
Posted 井盖同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql约束相关的知识,希望对你有一定的参考价值。
什么是mysql约束?
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
常见的额约束
|---主键约束:primary key
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
1,复合主键:在一个数据表中通过多个字段作为主键来确定一条记录,那么,多个字段组成的就是复合主键
create table student( name varchar(30) comment \'姓名\', age smallint comment \'年龄\', sex enum(\'男\',\'女\') comment \'性别\', primary key(name,age) )
2,联合主键:当两个数据表形成的是多对多的关系,那么需要通过两个数据表的主键来组成联合主键,就可以确定每个数据表的其中一条记录了
学生表:student ------------------- create table student( id mediumint auto_increment comment \'主键id\', name varchar(30) comment \'姓名\', age smallint comment \'年龄\', primary key(id) ) engine = myisam, charset = utf8, comment = \'学生\' 课程表:course --------------------- create table course( id mediumint auto_increment comment \'主键id\', name varchar(30) comment \'课程名称\', primary key(id) ) engine = myisam, charset = utf8, comment = \'课程\' 学生课程表:stu_cour --------------------------- create table IF NOT EXISTS stu_cour( id mediumint auto_increment comment \'主键id\', stu_id mediumint comment \'学生表id\', cour_id mediumint comment \'课程表id\', primary key(id) )
|---外键约束:外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
1,外键使用规范:
1、从表的字段必须与外键类型同样(如上。分数表 stu 的类型必须和学生表 sid 的类型同样,比方都是 int(10) 类型)
2 外键必须是主表的唯一键(如上。学生表 sid 是主键,而主键是唯一的。所以能够作为分数表 stu 的外键)
3、有关联的字段(如上,分数表之所以使用学生表的 sid 是由于两者有关联,分数表记录的是学生的分数,而学生能够用 sid 来唯 一标识)
2,
FOREIGN KEY (从表字段) REFERENCES 主表 (字段)
或
alter table 从表表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
3,为什么说外键能保持数据的一致性、完整性:在设置外键的情况下。你插入从表的外键字段的值必需要求在主表的主键字段能找到。 同一时候。假设你要主表的主键字段。必须 保证从表中没有引用该字段值的列(也就是没有跟这一列建立外键),否则就没法删除。
|---唯一约束:
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
|---非空约束not null:
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:
所有的类型的值都可以是null,包括int、float 等数据类型
|---默认值 default
以上是关于mysql约束的主要内容,如果未能解决你的问题,请参考以下文章
mysql 错误代码1217 MYSQL外键约束检查失败,删除或修改主表记录失败 怎么解决啊
NestedScrollView、LinearLayout 超出约束过度滚动
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段