MySQL事务、索引、数据恢复和备份

#第一个会话

#调用库 关键词:use
USE kj11;
#改变事务之自动提交    关键词:set autocommit 0:关闭/1:打开
SET autocommit = 1;
#查询表    关键词:show tables
SHOW TABLES;
#查询表信息    关键词:select * from
SELECT * FROM grade;
#添加
INSERT INTO grade VALUES
(5,'大五');
#删除
DELETE FROM grade WHERE GradeID = '5';
#手动添加数据    关键词:commit
COMMIT;

#MySQL事务、索引、数据恢复和备份
/*
事务就是将一组SQL语句放在同一批次内去执行
如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
事务必须具备以下四个属性,简称ACID 属性
1)原子性(Atomicity)

2)一致性(Consistency)

3)隔离性(Isolation)

4)持久性(Durability)

MySQL的事务实现方法
SET  AUTOCOMMIT
使用SET语句来改变自动提交模式

1) SET AUTOCOMMIT  = 0;    # 关闭自动提交模式
2) SET AUTOCOMMIT  = 1;    # 开启自动提交模式
注意!
1) MySQL中默认是自动提交
2) 使用事务时应先关闭自动提交 

MySQL的事务实现方法
1) START TRANSACTION
   开始一个事务,标记事务的起始点
2) COMMIT
   提交一个事务给数据库 
3) ROLLBACK
   将事务回滚,数据回到本次事务的初始状态 
4) SET AUTOCOMMIT = 1;
   开启MySQL数据库的自动提交


数据库索引
    作用
        1)提高查询速度
        2)确保数据的唯一性
        3)可以加速表和表之间的连接,实现表与表之间的参照完整性
        4)使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
        5)全文检索字段进行搜索优化
    分类
        1)主键索引(PRIMARY KEY)
        2)唯一索引(UNIQUE)
        3)常规索引(INDEX)
        4)全文索引(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
        查看索引
            SHOW  INDEX(或KEYS) FROM 表名

    索引准则
        索引不是越多越好
        不要对经常变动的数据加索引
        小数据量的表建议不要加索引
        索引一般应加在查找条件的字段

*/

#删除表 关键词:drop
DROP TABLE IF EXISTS account;
#创建新表:account
CREATE TABLE IF NOT EXISTS account(
id INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
 cash DECIMAL(9,2) NOT NULL,
 PRIMARY KEY (id)
)ENGINE = INNODB CHARSET=utf8 COLLATE=utf8_bin;

#清空表    关键词:delete
DELETE FROM account;
#添加记录    关键词:insert into ...values....
INSERT INTO `account` VALUES
(1001,'A',2000),
(1002,'B',10000);
#查询表 关键词:account
SELECT * FROM account;

#开启事务 start transaction
START TRANSACTION;
#a向b转500元 update...set...where...; savepoint A:事务结果保存到点A
UPDATE account SET cash = (cash-500) WHERE `name` = 'A';
SAVEPOINT A;
UPDATE account SET cash = (cash+500) WHERE `name` = 'B';
SAVEPOINT B;
UPDATE account SET cash = (cash+500) WHERE `name` = 'B';
SAVEPOINT c;
/*
#没有发生错误 commit:自动提交
注意 事务提交后就不可以进行回滚
COMMIT;
*/
#发生错误  回滚到A保存点 关键词:rollback to A:回滚返回到指定A点
ROLLBACK TO A;
#发生错误  回滚到事务开始状态    关键词:rollback:回到初始点;
ROLLBACK;
COMMIT;
/*#发生错误 回滚到B保存点
rollback to B;
select * from account;
rollback to A;#报错!原因回滚后不可以回头
*/
#视图
#查询学生姓名,年纪名称,学习的科目名称
SELECT a.`StudentName`,b.`GradeName`,c.`SubjectName` FROM student a,grade b,SUBJECT c
WHERE a.`GradeID` = b.`GradeID`
AND b.`GradeID` = c.`GradeID`;

#删除视图 关键词:drop view if exists 
DROP VIEW IF EXISTS student_grade_subject_view;
#创建视图    思路:将上表的查询结果做成视图提供给下面的需求会变得很简单
#关键词:create view  视图名  as  创建视图依据
CREATE VIEW `student_grade_subject_view` AS 
SELECT a.`StudentName`,b.`GradeName`,c.`SubjectName` FROM student a,grade b,SUBJECT c
WHERE a.`GradeID` = b.`GradeID`
AND b.`GradeID` = c.`GradeID`;

SELECT * FROM `student_grade_subject_view`; 
#查询大一学生的信息
SELECT StudentName FROM `student_grade_subject_view`
WHERE GradeName = '大一';

#查询大一学生郭靖的科目信息
SELECT SubjectName FROM `student_grade_subject_view`
WHERE StudentName = '郭靖';

#删除索引 关键词 alter table 索引所在表名 drop index 索引名;
ALTER TABLE student DROP INDEX student_index;
#创建索引    关键词:create index...on...
CREATE INDEX student_index
ON student(StudentName);

SELECT * FROM student
WHERE StudentName = '黄蓉';

#B树    Btree:数据库底层索引
SHOW INDEX FROM student;
#解释表信息
EXPLAIN SELECT * FROM student
WHERE StudentName = '黄蓉';
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值