什么是事务(ACID)?
- 事务是作为单个逻辑工作单元执行的一系列操作
- 多个操作作为一个整体向系统进行提交,要么都执行,要么都不执行。
- 事务是一个不可分割的工作逻辑单元。
事务的四个特性:
- 原子性(Atomicity):
- 事务是一个完整的操作,事务的各步操作是不可分的(原子性),要么都执行,要么都不执行。
- 一致性(Consistency):
- 当事务完成时,数据必须处于一致状态。
- 隔离性(Isolation):
- 并发事务之间彼此隔离、独立,它不应该以任何方式依赖于或者影响其他事务。
- 持久性(Durability):
- 当事务完成后,它对数据库的修改被永久的保持
如何创建事务:
注意:MySQL中支持事务的存储引擎有InnoDB和BDB
- 数据库,使用事务:
开始事务: begin 或者 start transaction
提交事务: commit
回滚(撤销)事务: rollback
-
jdbc,使用事务:
try{
connection.setAutoCommit( false);//开启事务
数据库操作...
connection.commit();//提交
}catch(Exception ex){
connection.rollback();//回滚
}finally{
connection.setAutoCommit( true);//关闭事务
}
视图:
-
视图是一张虚拟表:表示一张表的部分数据或多张表的综合数据
-
其结构和数据是建立在对表的查询基础上
-
视图中不存放数据;:数据存放在视图所引用的原始表中
-
视图的用途
-
筛选表中的行
-
防止未经许可的用户访问敏感数据
-
降低数据库的复杂程度
-
将多个物理数据库抽象为一个逻辑数据库
-
创建视图
CREATE VIEW view_name AS <SELECT 语句>;
CREATE VIEW student_grade_view AS
SELECT s.name,g.score FROM student AS s
INNER JOIN grade AS g ON s.id=g.gradeId
- 删除视图
DROP VIEW [IF EXISTS] view_name;
DROP VIEW student_grade_view
- 查看视图
SELECT 字段1, 字段2, …… FROM view_name;
SELECT * FROM student_grade_view
使用视图注意事项:
- 视图中可以使用多个表
- 一个视图可以嵌套另一个视图
- 对视图数据进行添加、更新和删除操作直接影响所引用表中的数据
- 当视图数据来自多个表时,不允许添加和删除数
注意:使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询
什么是索引:
概念:
简单的说,相当于一本书的目录。(数据库中的索引相当于字典的目录(索引)),它的作用就是提升查询效率。
- 索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
- 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
- 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
- 在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
- 可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
索引的特性:
- 一种独立于表的模式(数据库)对象, 可以存储在与表不同的磁盘或表空间中。
- 索引被删除或损坏, 不会对表(数据)产生影响, 其影响的只是查询的速度。
- 索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引。
- 在删除一个表时, 所有基于该表的索引会自动被删除。
- 如果建立索引的时候,没有指定表空间,那么默认索引会存储在哪个表空间.会存储在所属用户默认的表空间.
作用:
通过指针(地址)加速Oracle 服务器的查询速度。提升服务器的i/o性能(减少了查询的次数);
建立索引的优点:
- 大大加快数据的检索速度;
- 创建唯一性索引,保证数据库表中每一行数据的唯一性;
- 加速表和表之间的连接;
- 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
常用索引类型(索引的用途来分):
- 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点;
- 唯一索引:索引列中的值必须是唯一的,但是允许为空值;
- 主键索引:是一种特殊的唯一索引,不允许有空值。(主键约束,就是一个主键索引)
- 组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如,age或者(name,age)组合就不会使用索引查询。
- 全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有"你是个大学生,程序员 …" 通过大学生,可能就可以找到该条记录。
创建索引:
CREATE INDEX `index_student_name` ON `student`(`name`);
删除索引:
DROP INDEX index_student_name ON student;
创建索引的指导原则:
按照下列标准选择建立索引的列
- 频繁搜索的列
- 经常用作查询选择的列
- 经常排序、分组的列
- 经常用作连接的列(主键/外键)
请不要使用下面的列创建索引
- 仅包含几个不同值的列
- 表中仅包含几行
- 表频繁更新
使用索引时注意事项:
- 查询时减少使用*返回全部列,不要返回不需要的列
- 索引应该尽量小,在字节数小的列上建立索引
- WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
- 避免在ORDER BY子句中使用表达式
备份数据库:
把数据库里面的内容进行备份放到硬盘或者其他位置。如果数据库出现问题之后,可以进行数据的恢复。
备份数据库表中的数据 ,在命令行中
mysqldump -u 用户名 -p 数据库名 > 文件名.sql
mysqldump -u root -p mydb > d://mydb.sql
恢复数据库:
把数据库的所有内容,备份到 sql 文件中
注意:备份的时候,没有备份创建数据库的语句。当需要恢复某个具体的数据库时候,需要手动的创建数 据库。
- 第一种恢复:
source 文件名.sql
要求登录到某一个具体的数据库中。才可以使用 source 命令。
use mydb;
Source d://mydb.sql
注意:mysql 的备份没有数据库的创建的语句。
在内部备份的时候,切换到某一个具体的数据库.
- 第二种恢复:
这种恢复的方式,也需要数据库提前存在。
mysql -u root -p mydb < d://mydb.sql