Mysql的扩展(一些查询之外的功能)
为了查询更加方便有序,我有了解了一些Mysql的扩展:
事务:
一条或多条SQL语句组成的一个执行单元,特点是要么同时成功,要么同时失败。
单元中的每条SQL语句都相互依赖,形成一个整体。
如果某条SQL语句都执行成功,则事务就顺利执行。
如果某条SQL语句执行失败,那么整个单元就回到最初的状态。
事务的基本使用:
-- 开启事务
START TRANSACTION;
-- 回滚事务
ROLLBACK;
-- 提交事务
COMMIT;
查询事务提交方式:SELECT @@AUTOCOMMIT; -- 1代表自动提交 0代表手动提交
修改事务提交方式:SET @@AUTOCOMMIT=数字;
-- 查询事务的提交方式
SELECT @@autocommit;
UPDATE account SET money=2000 WHERE id=1;
COMMIT;
-- 修改事务的提交方式
SET @@autocommit = 1;
事务的四大特征(ACID):
- 原子性(atomicity)
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响
- 一致性(consistency)
- 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
- 拿转账来说,假设张三和李四两者的钱加起来一共是2000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是2000,这就是事务的一致性
- 隔离性(isolcation)
- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性(durability)
- 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作
事务的隔离级别:
- 隔离级别的概念
- 多个客户端操作时 ,各个客户端的事务之间应该是隔离的,相互独立的 , 不受影响的。
- 而如果多个事务操作同一批数据时,则需要设置不同的隔离级别 , 否则就会产生问题 。
- 我们先来了解一下四种隔离级别的名称 , 再来看看可能出现的问题
- 四种隔离级别
- 查询数据库隔离级别
```mysql
-- 标准语法
SELECT @@TX_ISOLATION;
```
- 修改数据库隔离级别
```mysql
-- 标准语法
SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;
-- 修改数据库隔离级别为read uncommitted
SET GLOBAL TRANSACTION ISOLATION LEVEL read uncommitted;
-- 查看隔离级别
SELECT @@TX_ISOLATION; -- 修改后需要断开连接重新开
存储引擎:
MySQL数据库使用不同的机制存取表文件,包括存储方式,索引技巧,锁定水平等不同的功能。这些不同的技术以及配套的功能称为存储引擎。
Oracle,SQL server等数据库只有一种存储引擎,而MySQL针对不同的需求,配置不同的存储引擎,就会让数据库采用不同的处理方式处理数据和扩展功能。
MySQL支持的存储引擎有很多,常有的有:InnoDB,MyISAM,MEMORY
特性对比:
InnoDB存储引擎:支持事务和外键操作,并支持并发控制,占用磁盘空间大
MyISAM存储引擎不支持事务和外键操作,访问快
MEMORY存储引擎内存存储,速度快,不安全,适合小量快速访问的数据
索引:
/*
创建索引
CREATE [UNIQUE|FULLTEXT] INDEX 索引名称
[USING 索引类型] -- 默认是BTREE
ON 表名(列名...);
*/
-- 为student表中的name列创建一个普通索引
CREATE INDEX idx_name ON student(NAME);
-- 为student表中的age列创建一个唯一索引
CREATE UNIQUE INDEX idx_age ON student(age);
/*
查询索引
SHOW INDEX FROM 表名;
*/
-- 查询student表中的索引 (主键列自带主键索引)
SHOW INDEX FROM student;
-- 查询db4数据库中的product表 (外键列自带外键索引)
SHOW INDEX FROM product;
/*
ALTER添加索引
-- 普通索引
ALTER TABLE 表名 ADD INDEX 索引名称(列名);
-- 组合索引
ALTER TABLE 表名 ADD INDEX 索引名称(列名1,列名2,...);
-- 主键索引
ALTER TABLE 表名 ADD PRIMARY KEY(主键列名);
-- 外键索引(添加外键约束,就是外键索引)
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名);
-- 唯一索引
ALTER TABLE 表名 ADD UNIQUE 索引名称(列名);
-- 全文索引
ALTER TABLE 表名 ADD FULLTEXT 索引名称(列名);
*/
-- 为student表中score列添加唯一索引
ALTER TABLE student ADD UNIQUE idx_score(score);
-- 查询student表的索引
SHOW INDEX FROM student;
/*
删除索引
DROP INDEX 索引名称 ON 表名;
*/
-- 删除idx_score索引
DROP INDEX idx_score ON student;
索引是在存储引擎中实现的,不同的存储引擎支持的索引也不一样,
BTree索引类型是基于B+Tree数据结构的,而B+Tree数据结构又是BTree数据结构的变种。通常使用在数据库和操作系统中的文件系统,特点 是能够保持数据稳定有序