视图(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基础知识,可以戳我一起交流学习!