欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL的事务、索引、数据库备份及还原

程序员文章站 2024-01-26 12:17:34
...

事务

事务就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
注意:MySQL事务处理只支持InnoDB和BDB数据表类型

事务的特性

①原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
②一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
③隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
④持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

MySQL的事务实现

①使用SET语句来改变自动提交模式:SET AUTOCOMMIT=1
②开始一个事务,标记事物的起始点:START TRANSACTION
③提交一个事务给数据库:COMMIT
④将事务回滚,数据回到本次事务的初始状态ROLLBACK
MySQL的事务、索引、数据库备份及还原
示例
顾客A在线购买一款商品,价格为500.00元,采用网上银行转账的方式支付
假如顾客A银行卡的余额为2000.00元,且向卖家B支付购买商品费用500.00元,起始卖家B的账号金额10000.00元
创建数据库shop和创建表account并插入2条数据

CREATE TABLE account(
	id INT(11) AUTO_INCREMENT PRIMARY KEY,
	`name` VARCHAR(32),
	cash DECIMAL(9,2)
)

INSERT INTO `account` (`name`,`cash`) VALUES ('customer',2000.00);
INSERT INTO `account` (`name`,`cash`) VALUES ('shop',100000.00);

// mysql事务模拟
set autocommit=0;
start transaction;
update account set cash=cash-2000 where name='bank';
update account set cash=cash+2000 where name='shop';
#rollback
commit
set autocommit=1;

数据库索引

作用

①提高查询速度
②确保数据的唯一性
③可以加速表和表之间的连接,实现表与表之间的参照完整性
④使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
⑤全文检索字段进行搜索优化

分类

①主键索引(PRIMARY KEY)
②唯一索引(UNIQUE)
③常规索引(INDEX)
④全文索引(FULLTEXT)

主键索引

某一个属性或属性的组合能唯一标识一条记录
特点
最常见的索引类型
确保数据记录的唯一性
确定特定数据记录在数据库中的位置

 CREATE TABLE  `Grade` (
       `GradeID`  INT(11)   AUTO_INCREMENT    PRIMARY KEY,
        #省略代码……
        #主键索引也可在字段字义之后,如
        #  PRIMARY KEY(`GradeID`)    
)

唯一索引(UNIQUE)

避免同一个表中某数据列中的值重复
与主键索引的区别:
主键索引只能有一个
唯一索引可有多个

CREATE TABLE  `Grade` (
	`GradeID`  INT(11)  AUTO_INCREMENT  PRIMARY KEY,
	`GradeName`  VARCHAR(32)  NOT NULL  UNIQUE
	#或  UNIQUE  KEY  `GradeID`  (`GradeID`)
)

常规索引(INDEX)

快速定位特定数据
注意:
index和key关键字都可设置常规索引
应加在查找条件的字段
不宜添加太多常规索引,影响数据的插入、删除和修改操作

// 创建表时添加
CREATE TABLE  `result` (
    //省略一些代码
    INDEX/KEY `ind` (`studentNo`, `subjectNo`)
)
// 建表后添加
ALTER TABLE  `result`  ADD  INDEX  `ind` 
     (`studentNo`, `subjectNo`);

全文索引(FULLTEXT)

快速定位特定数据
注意:
只能用于MyISAM类型的数据表
只能用于 CHAR 、 VARCHAR、TEXT数据列类型
适合大型数据集

// 创建表时添加
CREATE TABLE  `student` (
     #省略一些SQL语句
      FULLTEXT (`StudentName`) 
)ENGINE=MYISAM;
// 建表后添加
ALTER TABLE employee ADD FULLTEXT (`first_name`);

管理索引

①建表后添加索引

ALERT TABLE 表名 ADD  索引类型(数据列名)

②删除索引

DROP INDEX 索引名 ON 表名
ALTER TABLE 表名  DROP INDEX 索引名
ALTER TABLE 表名  DROP PRIMARY KEY

索引准则

①索引不是越多越好
②不要对经常变动的数据加索引
③小数据量的表建议不要加索引
④索引一般应加在查找条件的字段
示例
给数据库表student添加索引:
学号StudentNo,添加主键索引
身份证IdentityCard,添加唯一索引
邮箱Email,添加常规索引

alter table student add primary key(StudentNo);
alter table student add unique(IdentityCard);
alter table student add index 'myIndex'(Email)

查看SQL语句的执行性能

EXPLAIN 表名 (DESC 表名)
EXPLAIN SELECT语句

正确添加索引

①在WHERE、ORDER BY 子句中经常使用的字段
②字段的值是多个(例如性别字段则不适合)
③字段内容不是经常变化的,经常变化的字段,添加索引反而降低性能
④不宜过多添加索引,每添加一条索引都会占用磁盘空间

MySQL的备份

数据库备份可以保证重要数据不丢失,进行数据转移

MySQL数据库备份方法

①mysqldump备份工具
②数据库管理工具,如SQLyog
③直接拷贝数据库文件和相关配置文件

mysqldump备份数据库

作用
转储数据库
搜集数据库进行备份
将数据转移到另一个SQL服务器(不一定是MySQL服务器
用法
mysqldump -h 主机名 –u 用户名 –p [options] 数据库名
[ table1 table2 table3 ] > path/filename.sql
示例

// 备份myschool数据库如: 
mysqldump -u root -p  myschool > d:/myschool.sql

mysqldump常用选线:
MySQL的事务、索引、数据库备份及还原
MySQL的事务、索引、数据库备份及还原

MySQL数据库的恢复

①source命令

SOURCE /path/db_name.sql;

/path/是一个绝对路径,并且必须是mysql 运行用户有权限读取的文件
SOURCE 在MySQL命令行里执行
②用 mysql 客户端

mysql –u root –p  dbname  <  /path/db_name.sql;