事务 索引 备份 恢复
1、执行顺序
-
select 4.对分组后的记录进⾏统计计算。
-
from 1. 从指定的表中取出所有的记录。
-
where 2. 根据条件进⾏筛选记录。
-
group by 3. 根据指定的字段进⾏分组。
-
having 5. 对统计后的结果再次进⾏筛选。
-
order by 6. 根据指定的字段进⾏排序。
-
limit 7. 取出指定的偏移量和⾏数的部分记录。
2、事务
- 什么是事务:是数据库操作的最基本的单元,在逻辑上是⼀组操作,要么都成功,如果其中有⼀条失败,就都失败。
- 例子:银行转账
-
事务的特性
-
原⼦性: 有多个操作,要么都成功,如果有⼀个失败,就所有的都失败。
-
⼀致性: 操作之前和操作之后的总量不变。
-
隔离性: 在并发操作中,多事务操作,多事务之间不互相影响。
-
持久性: 当事务操作完成之后,进⾏事务的提交,数据库才真正发⽣变化。
-
-
mysql的事务处理 只⽀持InnoDb 和 BDB 数据表类型
-
表类型 优点 缺点
-
MyISAM 快速度,占⽤空间⼩ 不⽀持事务和外键
-
InnoDB ⽀持事务和外键 速度慢,占⽤空间⼤
-
BDB ⽀持事务 ,不⽀持外键 速度慢,占⽤空间⼤
-
-
⾃动提交模式
-
使⽤set autocommit 来改变⾃动提交的模式。
-
set autocommit =0 #关闭⾃动提交。
-
set autocommit =1 #开启 ⾃动提交。
-
mysql中默认的是⾃动提交。
-
select @@autocomiit; #查看⾃动提交的模式。
-
-
事务的实现⽅法
-
start transaction(begin) 开启⼀个事务,标记事务的⼀个起点。
-
start transaction(begin) 开启⼀个事务,标记事务的⼀个起点。
-
rollback 将事务回滚,数据回到本次事务初始的状态。
-
-
事务的处理步骤
-
关闭⾃动提交。
-
开启⼀个事务。
-
commit 或 rollback
-
开启⾃动提交
- 例子
select @@autocommint; #查询当前的自动模式是否开启 1开启 0关闭 create table account( id int(3) primary key auto_increment, name varchar(10), money decimal(9,2) ); insert into account (name,money) values ("A",2000.0); insert into account (name,money) values ("B",2000.0); -- 用事务 A给B转账500 -- 1、关闭自动提交 set autocommit=0; -- 2、开启一个事务 start transaction; -- 3、具体操作 update account set money=money-500 where name="A"; update account set money=money+500 where name="B"; -- 4、提交 commit; -- 回滚 rollback; -- 5、开启自动提交 set autocommit=1;
-
3、索引
-
索引的作⽤
-
提⾼查询的速度
- 确保数据的唯一性
- 可以加速表和表之间的连接,实现表与表之间参照完整性。
- 使用分组和排序子句进行检索时,可以显著减少分组和排序的时间。
-
-
索引的分类
-
主键索引(primary key):学⽣表中的学号,就是⼀个唯⼀标识,可以作为主键
-
唯⼀索引( unique key)
-
避免在同⼀个表中,某列数据的值重复。
-
与主键的区别
-
主键索引只能有⼀个
-
唯⼀索引可以有多个
-
-- 主键索引 唯一索引 create table student2( id int primary key auto_increment, #主键索引 name varchar(20) unique key #唯一索引 ); insert into student2(name) values ("张三") ;
-
-
-
常规索引( index | key)
-
作⽤: 快速定位特定数据
-
index和key都可以设置常规索引,主要⽤于查找条件字段
-
不宜添加太多常规索引, 影响数据的插⼊和删除和修改的速度。
-
-- 常规索引 create table student3( id int primary key auto_increment, name varchar(20), key(name) ); insert into student3(name) values ("张三") ;
-
-
-- 练习:给myschool库中的student表添加索引 -- 学号为主键索引,身份证号为唯一索引 姓名为常规索引 -- 表存在的情况下,添加索引 alter table student add primary key(StudentNo); alter table student add unique key(IdentityCard); alter table student add key(StudentName); -- create 索引类型 索引名 on 表名(字段名); create index stu_gradeId on student(GradeId);
-
索引准则
-
索引不是越多越好。
-
小数据量的表建议不要加索引。
-
索引⼀般⽤在查找条件的字段上,如 where order by 后边的列名。
-
字段的值是多个的不适合做索引。
-
字段内容不是经常变化的,适合做索引,如果给经常变化的字段添加索引反⽽会降低性能。
-
不宜添加过多索引,每添加⼀条索引都会占⽤磁盘空间。
-
-
查看表的索引和删除索引
-- 查看表的索引 -- show 索引类型 from 表名 -- 查看学生表中的索引 show index from student; show keys from student; -- 删除索引 -- drop index 索引名 on 表名 drop index IdentityCard_2 on student; -- alter table 表名 drop index 索引名 alter table student drop index IdentityCard;
-
4、备份
-
数据库的备份⾮常有必要。
-
数据转移。
-
备份⽅法
-
数据库的管理 ⼯具 sqlyog navicate
-
mysqldump 备份⼯具
-
格式: mysqldump -h主机名 -u⽤户名 -p密码 数据库名[table1 table] >路径⽂件.sql
-
mysqldump -uroot -p123456 myschool >C:\Users\hsk\Desktop\sql_dump\myschool_back.sql #把mysql数据库全部备份到文件 mysqldump -uroot -p123456 myschool student >C:\Users\hsk\Desktop\sql_dump\myschool_back.sql #把mysql数据库student表备份到文件
-
-t 只有数据没有表结构
-
-d 只有表结构没有数据
-
-
恢复数据库
-
mysql -u⽤户名 -p密码 数据库名< 备份的⽂件.sql
-
要先有这个数据库
-
mysql -uroot -p12345678 myschool3 <C:\Users\hsk\Desktop\sql_dump\myschool_student_back.sql
-
-
⽤source语句
-
先进⼊mysql客户端 mysql -uroot -p密码
-
source ***.sql
-
mysql -uroot -p123456 use myschool; Database changed source C:\Users\hsk\Desktop\sql_dump\myschool_result_back.sql;
-
-
使⽤sql语句导⼊和导出数据
-
如果命令不能⽤查 https://baijiahao.baidu.com/s?id=1731318787265238561&wfr=spider&for=pc
-
select * into outfile "路径⽂件名" from 表名 #输⼊的⽂件名不能先存在
-
load data infile "⽂件名" into table 表名
-
-
-