事务控制
开启事务:start transaction
回滚到事务开始的地方:RollBack
添加保存点:SavePoint point1 (同名保存点,后创建的会覆盖先创建的。删除保存点: release SavePoint point1 )
回滚到保存点:RollBack To point1
提交事务:Commit
commit and chain:提交事务后,马上开启一个新事务
commit release 或者commit work :提交事务后断开与客户端的连接。
MySQL分区
分区有利于管理非常大的表,他采用了分而治之的逻辑。分区引入了分区键的概念,分区键用于根据某个区间值(或者范围)、特定值列表或者Hash函数值执行数据的聚集。让数据根据规则分布在不同的分区中。让一个大对象变成许多小对象。
MySQL分区的优点
1.和单个磁盘或者文件系统分区相比,可以存储更多的数据
2.优化查询。在where字句中包含分区条件时,可以只扫描必要的1个或几个分区。count(*)函数可以并发执行再汇总结果
3.对于已经过期或者不需要保存的数据,可以通过删除与这些数据相关的分区来删除这些数据
4.跨多个磁盘来分散数据查询,以获得更大的查询吞吐量。
分区类型
1.Range分区:基于一个给定连续区间范围,把数据分配到不同的分区。
2.List分区:类似Range分区,区别在于List分区是基于枚举出的值列表分区,Range是基于给定的连续区间范围分区
3.Columns分区:类似于Range和List,区别在于分区键既可以是多列又可以是非整数
4.Hash分区:基于给定的分区个数,把数据取模分配到不同的分区
5.Key分区:类似于Hash分区,但使用MySQL提供的哈希函数
6.子分区:也叫做复合分区或者组合分区,即再主分区下再做一层分区,将数据再次分割。
在Mysql 5.7中除了Key分区和Columns分区其他的分区都必须是int类型。
不能使用主键或者唯一键之外的键作为分区键,除非没有主键或者唯一列。
Range分区
例子
create table test7(
id int
)
Partition BY Range(id) (
Partition p0 Values Less Than (10),
Partition p1 Values Less Than (20),
Partition p2 Values Less Than (30)
)
用id作为分区键分了三个区。分别是小于10、[10,20) [20,30)。如果插入30的话将会报错。
而且就像switch case 语句一样这三个不能调换顺序
Insert into test7 VALUES(30)
> 1526 - Table has no partition for value 30
> 时间: 0s
因为没有规定大于等于30的数据存在哪里。因此只需要加上即可。可以通过下列语句添加大于等于30的数据为一个分区
Alter Table test7 add Partition(Partition p3 Values Less Than(MAXVALUE))
> OK
> 时间: 0.037s
在执行插入语句
Insert into test7 VALUES(30)
> Affected rows: 1
> 时间: 0.003s
如果使用了Values Less Than (MAXVALUE)后又想要添加分区的话。只能重新建