|
Mariadb存储引擎:
Mariadb中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
显式请求对表添加读锁(共享锁)
1
| MariaDB [hellodb]> LOCK TABLES students READ;
|
撤销对表的锁定
1
| MariaDB [hellodb]> UNLOCK TABLES;
|
显式请求对表添加写锁(独占锁)
1
| MariaDB [hellodb]> LOCK TABLES students WRITE;
|
事务
启动事务
1
| MariaDB [hellodb]> START TRANSACTION;
|
回滚事务
1
| MariaDB [hellodb]> ROLLBACK;
|
提交事务
1
| MariaDB [hellodb]> COMMIT;
|
对事务做保存点savepoint,可以回滚到指定的保存点
1
2
3
4
5
6
7
8
9
| MariaDB [hellodb]> START TRANSACTION;
MariaDB [hellodb]> DELETE FROM students WHERE StuID=1;
MariaDB [hellodb]> SAVEPOINT SP1;
MariaDB [hellodb]> INSERT INTO students(Name,Age,Gender) VALUES ('test',19,'M');
MariaDB [hellodb]> SAVEPOINT SP2;
MariaDB [hellodb]> ROLLBACK TO SP2;
#回滚到保存点
MariaDB [hellodb]> RELEASE SAVEPOINT SP1;
#删除保存点
|
事务隔离级别:
READ UNCOMMITTED (读未提交,能读别人还没有提交的数据),存在脏读,不可重复读,幻读问题
READ COMMITTED (读提交,只有别人提交的数据才能读取,未提交的数据是看不到的),存在不可重复读,幻读问题
REPEATABLE READ (可重读,可以多次读取,多次读取的数据不会改变,一边修改不会影响另一边数据,只有另一边也提交了才会更改),存在幻读问题
SERIALIZABILE (可串行化,一个会话的操作会阻塞另一个会话),存在加锁读问题
可能存在问题:
脏读,读别人还没有提交的数据;
不可重复读,两次读取的数据不一致;
幻读,当对方不提交时数据一致,当对方提交后数据不一致,导致不知道那个数据为真实数据;
加锁读;
1
2
3
| MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'tx_isolation';
MariaDB [(none)]> SET tx_isolation='READ-UNCOMMITTED';
#默认级别为REPEATABLE-READ
|
|
|
|