36、mySql数据库中的事务,索引等一系列的操作

一、掌握事务的使用
1.事务:事务就是进行一系列的操作,(称为一个完整的业务)
2.特点就是:执行的时候要么全部成功,要么就全部失败,不会存在一半成功,一半失败的情况
3…

4.下面是创建一个转账表,方便使用
/*
 Navicat Premium Data Transfer

 Source Server         : mysql001
 Source Server Type    : MySQL
 Source Server Version : 50527
 Source Host           : localhost:3306
 Source Schema         : mybank

 Target Server Type    : MySQL
 Target Server Version : 50527
 File Encoding         : 65001

 Date: 27/03/2019 17:27:18
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for bank
-- ----------------------------
DROP TABLE IF EXISTS `bank`;
CREATE TABLE `bank`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `money` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of bank
-- ----------------------------
INSERT INTO `bank` VALUES (1, '宋', '1000');
INSERT INTO `bank` VALUES (2, '史', '200');

SET FOREIGN_KEY_CHECKS = 1;
#转账案例;从小转出200,然后布增加200
1.先转出200
update bank set money = money-200  where  name='xxx';
2.然后将里一个账户增加200
update bank  set money = money+200  where name='lll';


3.使用事务进行处理
(只有在innoDB存储引擎才支持事务,myIsam是不支持事务的)
#开启事务
begin;
#①扣钱
update bank set money = money-200  where  name='xxx';
#②加钱
update bank  set money = money+200  where name='lll';
#如果事务内的一系列的操作都是正常执行,则可以进行提交事务
#commit;
#当事务进行过程中出现了问题,就会执行数据的回滚,返回到当初数据的初始状态
#rollback;
#ddl语句和truncate 会影响事务,事务会提前结束,也就是说数据会回到初始的状态
begin;
UPDATE bank SET money = money + 200 WHERE `name` = 'xxx'
#开启事务之后,进行表的创建和利用truncate的清楚数据都会影响事务,
CREATE DATABASE `hehe`;
TRUNCATE TABLE bank;

#但是delete是不会影响事务
DELETE FROM bank;
#结束事务
commiit;

二、掌握acid原则(事务的特性)
1.A事务的 原子性:原子是不可再分的最小单元,同理事务也是一个整体,不能再分割的
2.C事务的一致性:事务在执行前后执行后,无论事务是否执行成功,最终返回的数据是一致的,
3.I掌握事务的隔离性:
事务和事务之间相互影响
事务和事务之间相互影响的结果有几种情况
①脏读(必须不允许脏读的存在):一个事务读取到了另一个未提交事务的信息,(事务都没有提交之前是不能进行读取它里面的文件的)
②不可重复读:在一个事务中,对同一块数据的俩次或者多次的查询,结果却不相同,主要针对的是其他事务对数据表的updata操作
#③幻读(虚读):在一个事务中,对全表进行了更新操作,结果发现在后期有数据没有进行更新,
因为另一个是事务对此表进行了insert操作

为了解决各种事务的影响,各个数据库提供了不同的隔离级别,隔离级别越严格,效率越低,
①Serializable(串行化):可以避免脏读,不可重复读,和幻读的发生,{效率低,不用}
②Repeatable read (可重复读):可以避免脏读,不可重复读的发生,MySQl中的默认的。
③Read committed读已提交 :可以避免脏读的发生,Oracle是默认的。同样Oracle数据库只有串行化和读已提交
④Read uncommitted (读未提交)最低级别,任何情况无法保证(不适用)
主要针对是其他事务对数据表的update操作
4.D事务的持久性:事务无论是否执行成功,都要最终持久化得到数据库中

三、视图的使用
#视图是虚拟表,基础查询,将多个物理数据库抽象为一个 逻辑数据库,

#创建视图:创建通讯录,学生姓名,学生性别。手机号,邮箱,地址
create view  student_communication 
as 
select 
studentName,sex,phone,email,address
from
student;
#查询通讯录信息
select * from student_communication
#删除视图
drop view  student_communication;

四、掌握索引的创建{提升查询性能}
1.索引的作用:提升查询效率(正确合理的设计并使用才能提升数据库的查询效率)
2.索引的分类;(普通索引,唯一索引,主键索引,符合索引)常用,全文索引(MyIsam引擎使用的),空间索引,
3.在设置唯一约束时,会自动创建唯一索引
4.在设置主键约束时,会自动创建主键索引
#创建姓名索引
create index student_name on student(studentName);
#删除索引
drop index student_name on studenet;

索引创建的时候的注意事项
1.经常查询的列 可以创建索引
2.频繁排序,分组的列可以创建索引
3.经常作为练得列可以创建索引(主键
、外键)
4.列的值仅有几个不相同 不建议创建索引
5.数据表该列的值没有太多行记录,不建议创建索引
6.如果多个列频繁查询,可以创建符合索引
7.合理的设计,不要太多建立
使用注意事项
1.如果设计到了索引列的查询,那么必须要将索引列放在前方,
2.如果使用符合索引,必须将符合索引的顺序指定正确,否则就会失效

查看某个表的所有索引
如果是在命令行记得加\G可以查看的更清晰
查看某个表的索引
show index from student;

五、掌握数据库的备份和恢复
#MySQL的mysqldump命令
可以用于数据库结构和数据备份

##mysqldump[备份参数选项]-u用户名 -p密码 -h服务器的地址 要备份的数据库表名(不写表示是全部的数据库表)

备份的文件位置
#备份选项参数:-t 表示只导出数据,不要结构, -c 表示将插入的语句添加列名, -d 表示只要结构 不要数据

##使用mysql命令 可以用于数据库信息的恢复,(前提必须保证要恢复的数据库已经存在)
#mysql -h -u -p 要恢复的数据库名 <数据库文件位置

##使用sql命令 source
来恢复数据库信息(先进入mysql服务器 然后切换到对应的数据库下)
source 数据库文件的位置

##如果只想导出表的数据/查询数据
##select*from 表名[where条件] into outfle ‘导出数据文件位置’

#如果想把数据导回到表中
##load data infile ‘导入的数据文件位置’ into table 表名;

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88855794
今日推荐