![](https://i-blog.csdnimg.cn/blog_migrate/3db824c5402129195786a018a4096f26.png)
存储引擎:一种针对于文件的读写机制(N种)
存储引擎是基于表的
1、MYISAM 支持全文索引 不支持外键、不支持事务 (表锁)
2、INNODB 不支持全文索引 支持外键、支持事务 (行锁)
锁机制:
1、MYISAM(所有的连接称为会话)
表锁 锁定方式 1、读锁(共享读锁)
2、写锁(独占写锁)不允许其他连接读也不允许写
MYISAM select系统自动加读锁
updata insert delete 系统自动加写锁
2、INNODB(所有的连接称为事务)
行锁 锁定方式 1、读锁(共享锁)
2、写锁(排它锁) 加行锁不影响其他连接的查询
select 不加锁 updata insert delete 加写锁
1、读锁是共享锁-------》读锁和读锁共享 lock in share mode 加读锁
2、写锁是排它锁--------》不允许其他的锁出现 for update 加写锁
INNODB行锁加在主索引上(非索引查询加的是表锁 索引查询加的是行锁)
乐观锁(通过版本控制实现)悲观锁 意向锁 间隙锁
事务:一组SQL语句的集合
A、原子性 C、一致性 I、隔离性 D、持续性
没有隔离性可能会导致的问题
1、脏读(事务回滚导致)
2、不可重复读(修改操作导致)
3、幻读(插入和删除操作导致)
隔离级别(select @@ tx_isolation)
1、未提交读 会出现(脏读、不可重复读、幻读)问题
2、已提交读 会出现(不可重复读、幻读)问题
3、可重复读 会出现(幻读)问题 是MYSQL默认的隔离级别
4、可序列化
不可重复读的解决:事务执行过程中,新执行的任务看不到事务执行的结果
MYSQL里的两个日志
1、redo log重做日志:记录事务将要执行的操作 日志先行----->先将日志写到操盘上,再执行日志里的操作,宕机时不会影响
2、undo log未做日志:记录每个操作的状态(select操作状态不记录,因为不修改数据)回滚主要借助undolog
两个日志保证原子性
一致性:锁机制
持续性:日志系统
触发器:当一个事件到来触发另一个事件的发生
创建: delimiter(修改结束符) $
create trigger tri_name(触发器的名字)
trigger_time(触发时间) before after
trigger_event(触发事件) insert update delete (select不会触发触发器)
on tb_name(基于某个表)
for each row
trigger_stmt;(做的其他事)
create trigger tri_1
after
insert
on test
for each row
begin
set @count = @count + 1;
end $
存储过程(一个函数)能返回n多个返回值 存储函数返回一个返回值
(select update insert)可以写成一个函数
create procedure pro_name(存储过程名称)(参数属性 参数名称 参数类型,...)
begin
pro_stmt
end
IN(输入型参数)OUT(输出型)INOUT(输入输出型参数)
delimiter &
create procedure pro_3(INOUT tmp int)
begin
select tmp;
set tmp = 20;
select tmp;
end &
delimiter ;
输入型参数只做输入 是值传递
输出型参数只做输出 tmp形参为NULL
打印也是用select打印
select"hello world";