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

视图(view):

从一个或几个基本表中根据用户须要而作成一个虚表java

1)视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据sql

2)视图只在刚刚打开的一瞬间,经过定义从基表中搜集数据,并展示给用户数据库

视图与查询的区别:数据结构

1)存储上的区别:视图存储为数据库设计的一部分,而查询则不是.数据库设计

2)更新限制的要求不同函数

3)排序结果:经过sql语句,能够对一个表进行排序,而视图则不行.学习

视图的特色:设计

1)视图中的数据并不属于视图自己,而是属于基本的表,对视图能够像表同样进行增删改查操做。code

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基础知识,能够戳我一块儿交流学习!

相关文章
相关标签/搜索