mysql 基礎知識

事務

  • innodb支持事務,在執行事務的時候會記錄事務日誌

事務的特性:

  • 原子性:要麼都執行,要麼都不執行
  • 一致性:保證數據業務上一致。數據庫的完整性沒有被破壞。表示寫入的資料必須完全符合所有的預設規則
  • 持久性:一旦事務提交,對數據的修改是永久的
  • 隔離性:不同事務間相互隔離,在併發情況下不會因爲交叉執行導致數據不一致

手動開啓:

  • begin 或者 start transaction
  • rollback
  • commit

自動開啓

SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啓自動提交

delete truncate drop

- delete truncate drop
每次刪除條數 每次刪除一行 所有數據 所有數據
是否記錄事務 是(需要提交事務後才能生效,可以回滾 否(不能回滾) 否(不能回滾)
語句類型 DML DDL DDL
是否觸發觸發器
執行後空間大小 不會減少表或索引所佔用的空間 恢復到初始大小 表所佔用的空間全釋放掉
執行速度 較快
執行對象 table、view table table、view
刪除內容 只刪除數據 只刪除數據(表結構及其列、約束、索引等保持不變) 整個表(結構、數據、約束(constrain),觸發器(trigger)索引(index))
FOREIGN KEY 約束的表 支持 不支持 ??
是否支持where 支持 不支持 不支持
  • truncate爲什麼比delete快:delete每次只刪除一行,每行記錄事務日誌,truncate釋放存儲表數據所用的數據頁來刪除數據,只在事務日誌中記錄頁的釋放
  • delete會記錄事務日誌,同時也會記錄二進制日誌。drop和truncate只會記錄二進制日誌
  • 二進制日誌也叫作變更日誌,主要用於記錄修改數據或有可能引起數據改變的mysql語句

日誌:http://www.mamicode.com/info-detail-2087669.html
delete、truncate、drop:https://www.cnblogs.com/zhizhao/p/7825469.html

預編譯

prepare prep from "select count(*) from test2";
prepare pre2 from "select * from test2 where a=?";
set @a="select * from test2"; 
prepare pre1 from @a;execute pre1;
prepare pre3 from "select * from test2 where a=? and b=?";
  • 執行
execute prep;
set @a=10;execute pre2 using @a;
execute pre3 using @a,@b;
  • 刪除
drop prepare pre3;

https://blog.csdn.net/chinayuy/article/details/5425886

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章