一、数据约束:
什么是约束?
为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。
数据库完整性约束分为以下几个大类
(一)、主键约束
理论上来说每一个数据表都必须有一个唯一主键作为数据的唯一标识,设置主键的列不允许为空,主键习惯 id 表示,可以在创建数据时直接指定,也可以通过修改表结构直接添加,设置为主键的列在添加数据时不能重复,既唯一性。
添加两条主键id的数值
INSERT INTO student(id,name,age,email) VALUES (1,'张安',18,'1443005893@qq.com')
INSERT INTO student(id,name,age,email) VALUES (1,'李四',20,'1443005893@qq.com')
我们会发现有错误
主键一般不是数据表当中的应用列,而是额外增加的列,而是额外增加的列,如果手动维护的话比较麻烦,所以针对主键Mysql 定制了一种自动增长的策略,既不需要手动给值,而是让mysql自己去维护这个主键,方法是每次找到数据表中最大的ID值加1.
INSERT INTO student(name,age,email) VALUES ('张安',18,'1443005893@qq.com')
INSERT INTO student(name,age,email) VALUES ('李四',20,'1443005893@qq.com')
自动递增 AUTO_INCREMENT 的特点
1.只有整形数据列才能设置为自动递增
2.只有主键才能设置为自增列
3.自动增长,新增数据时可以不赋值
4.初始化默认值为1,默认增量为1
5.自增列一旦被使用过就不会出现
(二)、唯一约束
唯一约束用来保护表中某列数据不允许重复,与主键约束类似,但级别没有主键高。一份表中唯一约束可以创建多个,并且唯一约束的列允许为空。
注意varchar长度为255时,无法设置唯一约束。
唯一约束一般用于约束手机号、账户、邮箱等信息。
INSERT INTO student(name,age,email) VALUES ('张安',18,'1443005893@qq.com')
INSERT INTO student(name,age,email) VALUES ('lisi',20,'1443005893@qq.com')
当我们做第二次插入的时候我们会发现如下错误
(三)、非空约束
可以通过 not null 设置数据表中某一列是必填字段,既不允许为空。
(四)、默认约束
可以通过default设置默认值约束,设置了默认约束的列,如果不给值就会使用默认值来填充。
(五)、外键约束
外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性。
外键名(name):可以不填, 系统自动生成;
字段(Field Name): 就是设置‘dept_id’为外键;
参考数据库(Reference DadaBase): 外键(‘dept_id’)关联的数据库;
引用表(Reference Table): 关联的表, 这里是dept表;
外栏位名(Outside field name): 关联的字段(这里是“dept_id”, 可以与栏位名相同);
删除时:删除时候选择的动作(这里选择CASCADE);
刷新时:更新时候选择的动作(这里选择CASCADE)CASCADE ---就是当关联的表更新后, emp中的dept_id也随着更新。
删除和修改时的字段值
注意点
添加外键数据库引擎必须为InnoDB;
从表中的关联字段数据,必须在主表中。
从表中的关联字段数据,必须在主表中。
不要设置外键的原因
对性能具有较大的影响
在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能。在这些任务之前,数据库需要检查它是否违反数据完整性。这就是为什么一些架构师和DBA完全放弃外键的原因。数据仓库和分析数据库尤其如此,这些数据仓库和分析数据库不以交易方式(一次一行)处理数据,而是批量处理数据。性能是数据仓库和商业智能的一切。