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=?";
1234512345
执行
execute prep;
set @a=10;execute pre2 using @a;
execute pre3 using @a,@b;
123123
删除
drop prepare pre3;
11
https://blog.csdn.net/chinayuy/article/details/5425886
本文来自 阿睿93 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/designer01/article/details/82795086?utm_source=copy