六:约束、索引和视图
一:表的约束
表的约束:保证数据的完整性和安全性(例如:性别只能填男女,不能写其他的)
主键约束(primary key):要求主键列唯一,并且不能为空

唯一约束(unique):要求该列唯一,允许为空

非空约束(not null):某类内容不能为空
外健约束(foreign key):用于多表间建立关系
-外键具有保持数据完整性和一致性的机制,目前MySQL只在InnoDB引擎下支持
-(ENGINE=INNODB)
-外键是表中的一列,其值必须在另一个表的主键或者唯一键中列出
-作为主键的表称为主表,作为外键的表称为依赖表
-外键会参照主表的主键或唯一键
-关系型数据库的一个表中有若干个属性(列),若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键
比如:
学生表(学号,姓名,年龄,班级),其中学号是唯一的,学号就是一个主键
成绩表(学号,课程编号,成绩,班级):成绩表中单一一个属性无法唯一标识一条记录,学号和课程编号的组合才可以唯一标识一条记录。所以,学号和课程号的属性组是一个主键
-成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则可以设置成绩表中的学号是成绩表的外键
二:索引
当数据库中存了很多条记录,比如上千万条,查询速度就成了一个问题
1.此时可以建立类似目录的数据库对象,实现快速查询,这就是索引
索引的作用:索引用于快速找出在某个列中有一特定值的行,不实用索引,MySQL必须从第一条记录开始读完整的表,知道找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间
建立一个索引:
1.创建表时,主键会默认带有索引
2.创建一个索引

3.删除一个索引

索引的优缺点
1.优点:
所有的MySQL列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
大大加快数据的查询速度
2.缺点:
创建索引和维护索引要消耗时间,并且随着数据量的增加所耗费的时间也会增加
索引也需要占空间,如果我们有大量的索引,索引文件可能会占很多空间
当对表中的数据进行增删改时,索引也需要动态的维护,降低了数据的维护速度
索引使用原则:并不是每个字段设置索引就好,也不是索引越多越好,而是需要自己合理的使用
1.对经常更新的表就避免对其进行索引,对经常用于查询的字段应该创建索引
2.数据量小的表最好不要使用索引,因为由于数据量小,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果
3.在不同值少的列上(字段上)不要建立索引,比如性别字段只有男女两个值;相反,在一个字段不同值比较多时(唯一性较好)建立索引
三:视图
视图就是一条select语句执行执行后返回的结果集(显示结果是一个表)

在创建一个视图时,只存放视图的定义,也就是动态检索数据的查询语句,并不存放视图对应的数据,在用户使用视图时才去请求相对应的数据,所以视图称为虚表
视图的作用:专门进行某些查询
- 方便操作:减少复杂的sql语句,增强可读性
- 更加安全:在外界访问你的数据库时,经常不想让你访问它所有的数据,这时候可以建立视图,在视图中写好查询数据,同时限制外界的访问权限只能通过你给定的视图去查询
删除视图:DROP VIEW v_user;