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

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