MySQL 8.0支持的存儲(chǔ)引擎
可以使用SHOW ENGINES語句查看系統(tǒng)支持的引擎類型。
1、InnoDB
- 每個(gè)InnoDB表在數(shù)據(jù)庫目錄中以.frm格式文件表示
- InnoDB表空間 tablespace 被用來存儲(chǔ)表的內(nèi)容
- 提供一組用來記錄事務(wù)性活動(dòng)的日志文件
- 用COMMIT(提交),SAVEPOINT及ROLLBACK(回滾)支持事物處理
- 提供全ACID兼容
- 在mysql服務(wù)器崩潰后提供自動(dòng)恢復(fù)
- 多版本(MVCC)和行級(jí)鎖定
- 支持外鍵及引用的完整性,包括級(jí)聯(lián)更新和刪除
2、 MyISAM
3、 Memory
4、 Merge
5、 Archive
6、 Federated
7、 CSV
8、 BLACKHOLE
1. 事務(wù)的特性(ACID)
| 特性 |
說明 |
| 原子性(A) |
一個(gè)事務(wù)中的所有操作,要么全部完成,要么全部不完成不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié) |
| 一致性(C) |
在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞 |
| 隔離性(I) |
事務(wù)的隔離性要求每個(gè)讀寫事務(wù)的對象與其它事務(wù)的操作對象能相互分離,即該事務(wù)提交前對其它事務(wù)都不可見 |
| 持久性(D) |
事務(wù)一旦提交了,其結(jié)果就是永久性的,就算發(fā)生了宕機(jī)等事故數(shù)據(jù)庫也能將數(shù)據(jù)恢復(fù)。 |
2. 事務(wù)的隔離主要是解決并發(fā)帶來的問題,并發(fā)是用來提升數(shù)據(jù)的處理效率
| 隔離級(jí)別 |
臟讀 |
不可重復(fù)讀 |
幻讀 |
隔離性 |
并發(fā)性 |
| 順序讀( SERIALIZABLE) |
N |
N |
N |
最高 |
最低 |
| 可重復(fù)讀(REPEATABLE READ) |
N |
N |
N |
|
|
| 讀以提交(READ COMMITTED) |
N |
Y |
Y |
|
|
| 讀未提交(READ UNCOMMITTED) |
Y |
Y |
Y |
最低 |
最高 |
2.1 臟讀:一個(gè)事務(wù) 讀取了 另一個(gè)事務(wù)未提交的數(shù)據(jù)
| 事務(wù)1 |
事務(wù)2 |
| start transaction; |
- |
| select score from t_course where course_id=59;/* score = 9.2*/ |
|
|
start transaction; |
|
Update t_course set score=9.6 where course_id=59; |
| select score from t_course where ourse_id=59;/* score = 9.6*/ |
|
|
rollback; |
2.2 不可重復(fù)讀:一個(gè)事務(wù)前后兩次讀取的同一數(shù)據(jù)不一致
| 事務(wù)1 |
事務(wù)2 |
| start transaction; |
- |
| select course idscore from t_course where course id=56/* 56 9.6*/ |
|
|
start transaction; |
|
update t_course set score=9.7 where course_id=56; commit; |
| select course_id,score from t_coursewhere course_id=56/* 56,9.7*/ |
|
| commit; |
|
2.3 幻讀:指一個(gè)事務(wù)兩次查詢的結(jié)果集記錄數(shù)不一致
| 事務(wù)1 |
事務(wù)2 |
| start transaction; |
- |
| select course_id,score from t_course where score > 9.5 and score < 9.8 /* 56,9.6 73,9.7 */ |
|
|
start transaction; |
|
update t_course set score=9.7 where course_id=43; commit; |
| select course_id,score from t_course where score > 9.5 and score < /* 56,9.6 73,9.7 43,9.7*/ |
|
| commit; |
|
3. 設(shè)置事務(wù)隔離級(jí)別
/* 查看事務(wù)隔離級(jí)別 */
SHOW VARIABLES LIKE '%iso%'
/* 設(shè)置事務(wù)隔離級(jí)別 */
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE:
4. 查看阻塞的sql
SELECT
waiting_pid AS '被阻塞的線程',
waiting_query AS '被阻塞的SQL' ,
blocking_pid AS '阻塞線程' ,
blocking_query AS '阻塞SQL' ,
wait_age AS '阻塞時(shí)間',
sql_kill_blocking_query AS '建議操作'
FROM
sys.innodb_lock_waits
WHERE (
UNIX_TIMESTAMP () - UNIX_TIMESTAMP (wait_started)
) > 30 /* 查詢阻塞大于30s的語句 */
5.發(fā)現(xiàn)死鎖
1、配置記錄鎖的配置
set global innodb_print_all_deadlocks=on;
2、通過日志分析死鎖的原因

6.定時(shí)任務(wù)
將事件計(jì)劃開啟: set global event_scheduler=1;
創(chuàng)建定時(shí)任務(wù)事件e_student
CREATE EVENT if not exists e_student
on schedule every 30 second
on completion preserve
do call pro_test();