数据库:视图,索引,约束

视图(view):

从一个或几个基本表中根据用户需要而做成一个虚表

1)视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据
2)视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户

视图与查询的区别:

1)存储上的区别:视图存储为数据库设计的一部分,而查询则不是.
2)更新限制的要求不一样
3)排序结果:通过sql语句,可以对一个表进行排序,而视图则不行.

视图的特点:

1)视图中的数据并不属于视图本身,而是属于基本的表,对视图可以像表一样进行增删改查操作。
2)视图不能被修改,表修改或者删除后应该删除视图再重建。
3)视图可以被嵌套,一个视图中可以嵌套另一个视图。
4)视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。

视图的功能:

1)将用户限定在表中的特定行上。
2)将用户限定在特定列上。
3)将多个表中的列联接起来,使它们看起来象一个表。
4)聚合信息而非提供详细信息,例如显示一个列的和或列的最大值和最小值。

视图的优点:

1)视图着重于特定数据。
2)简化数据的操作,易维护。
3)视图可以限定查询数据。

视图的创建 :

创建视图:

语法:

CREATE VIEW view_name AS
SELECT column1, column2, ... FROM table_name 
WHERE condition;

更新视图:

语法:

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ... FROM table_name
WHERE condition;

删除视图:

语法:

DROP VIEW view_name

索引:

索引的分类:

1)普通索引

这是最基本的索引,它没有任何限制。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。

创建方式:

  • 创建索引
CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。

  • 修改表结构
ALTER mytable ADD INDEX [indexName] ON (username(length))
  • 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
  • 删除索引的语法:
DROP INDEX [indexName] ON mytable;

2)唯一索引

它与前面的普通索引类似,不同的就是:普通索引允许被索引的数据列包含重复的值。而唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

创建方式:

  • 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
  • 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
  • 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

3)主键索引

它是一种特殊的唯一索引,不允许有空值。一个表只能有一个主键。

一般是在建表的时候同时创建主键索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 

主键索引和唯一索引的区别:

①主键一定会创建一个唯一索引,但是有唯一索引的列不一定是主键;
②主键不允许为空值,唯一索引列允许空值;
③一个表只能有一个主键,但是可以有多个唯一索引;
④主键可以被其他表引用为外键,唯一索引列不可以;
⑤主键是一种约束,而唯一索引是一种索引,是表的冗余数据结构,两者有本质的差别

4)组合索引

为了进一步提高MySQL的效率,就要考虑建立组合索引。组合索引的使用要遵守“最左前缀”原则'。

索引的优点:

1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

索引的缺点:

1.索引需要占用数据表以外的物理存储空间
2.创建索引和维护索引要花费一定的时间
3.当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

索引的实现方式:

1)B+树
用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡;

2)散列索引
就是通过散列函数来定位的一种索引,不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。

3)位图索引
位图索引是一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。

索引使用:

  • 如果对大的文本进行搜索,使用全文索引而不要用使用 like ‘%…%’;
  • like语句不要以通配符开头;

    对于LIKE:在以通配符%和_开头作查询时,MySQL不会使用索引。

  • 不要在列上进行运算;

    索引列不能是表达式的一部分,也不是是函数的参数。

  • 尽量不要使用NOT IN、<>、!= 操作;

    应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

  • or条件;

    用 or 分割开的条件, 如果 or 前的条件中的列有索引, 而后面的列中没有索引, 那么涉及到的索引都不会被用到。

  • 组合索引的使用要遵守“最左前缀”原则';

约束:

1)主键约束: 要求主键列数据唯一,并且不允许为空。

格式为:

alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

2)唯一约束 :要求该列唯一,允许为空,但只能出现一个空值。

格式:

alter table 表名 add constraint 约束名称 约束类型(列名)

3)检查约束: 对该列数据的范围、格式的限制(如:年龄、性别等)

格式:

alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

4)默认约束 : 该数据的默认值,如在数据库里有一项数据很多重复,可以设为默认值。

格式:

alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

5)外键约束:需要建立两表间的关系并引用主表的列

格式:

alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

谢谢大家阅读,如果想要知道更多java基础知识,可以戳我一起交流学习!

你可能感兴趣的:(数据库)