思想:?create event(mysql -u root -p)
事件{(定时任务,到了时间就会执行SQL语句集合)}
create event event_name
on SCHEDULE schedule #计划任务 时间点 |间隔多久[开始][结束]
create table event_table(
id int primary key auto_increment;
insert_time datetime
)engine innodb default charset utf8;
#创建一个事件,每隔4秒插入一条数据
CREATE EVENT insert_event
ON SCHEDULE
every 4 second
do
insert into event_table values(null,now());
#查看事件状态
show events;
#事件是通过事件调度器管理的
#查看事件调度器状态
show variables like '%SCHEDULE%';
#查看进程列表
show processlist;
#开启事件调度器
set global event_scheduler=on; #1
#关闭事件调度器
set global event_scheduler=off;#0
#每隔一分钟清空表
create event truncate_event
on schedule
every minute
do
truncate table event_table;#立即执行
#开启/禁用事件
alter event insert_event disable;
alter event insert_event enable;
#7天后开启事件,每天清空 一个月后停止事件
create event clear_event
on schedule
every 1 day
start current_timestamp + interval 7 day
ends current_timestamp+interval 1 month
on completion not preserve
do
truncate table event_table;
#22:25 清空表事件
create event event1
on schedule
at '2019-1-18 22:25:0'
do
truncate table event_table;
事务:(为单个逻辑单元执行的一系列操作) start transaction
事务特性 ACID基本要素
A Atomicity 原子性
一个逻辑单元要么全部完成,要么全部不完成
A-->B 转账, A扣钱 B到账
C Consistency 一致性
A-->B 转账,A扣了1000 B到了500 C收了500
I Isolation 隔离性
A-->B转账
C-->D转账
D Durabiliy 持久性
事务一旦提交成功 数据不会改变
事务控制{
隐式事务:单独的insert update delete 默认是隐式事务 系统自动提交
显示事务:手动提交
}
show variables like 'autocommit';
#关闭自动提交
set autocommit=0;
select * from orders;
delete from orders where id=7;#此时并没有真实删掉
#回滚
rollback;#删除了缓存,实际表内容没有真是删掉,回滚就会出现(取消)
#提交,确认事务
commit; #(确认)
set autocommit=1;
#显示控制
start transaction
delete from orders where id=6;#防止误删
rollback;
commit;
##事务隔离级别
(级别低到高:{
#读未提交 : A 事务 未提交 B可以读到 -->脏读问题
#读提交:大多数数据库默认级别 解决了脏读问题 -->不可重复读的问题
#(数据库默认第三级别)可重读:解决了可重复读的问题-->幻读问题
#串行化读 不允许并发 解决了所有问题---->也出现了新的问题,时间消耗的问题
})
##事务隔离验证
create database day10;
use day10;
create table test(
id int primary key auto_increment,
name varchar(20),
age int
)engine innodb default charset utf8;
insert into test values(1,'pika',15),(2,'pikb',18);
select * from test;
select @@session.tx_isolation;
select @@global.tx_isolation;
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read ;
set session transaction isolation level serializable;
set global transaction isolation level read uncommitted;
set gloabl transaction isolation level read committed;
set gloabl transaction isolation level repeatable read ;
set gloabl transaction isolation level serializable;
#验证读未提交 read uncommitted
#验证读提交 read committed
#验证可重读 repeatable read;
#验证串行读 serializable
建立两个连接,进行验证操作
##锁(多个人同时读一个问题不需要加锁,如果要写的化,就要加锁,保持数据一致性)
协调多进程或则多线程并发访问某一资源的机制
#锁的类型 不同存储引擎锁的类型不同
MYISAM和MEMORY 存储引擎采用表级锁
BDB存储引擎采用页面锁
最高级INNODB存储引擎 采用表级锁和行级锁 默认采用行级锁
---------同时读不会有问题,涉及到写就会出现问题
读锁:共享锁
事务T在A对象上加了共享锁S,其他事务不可修改A,可以查询A,并且也可以加一个共享锁
写锁:拍他锁
事务T在A对象上加了排他锁X,其他事务对A对象不可以读不可以写,不可加锁。
#MYISAM表级锁
用户读数据时自动加read锁,修改数据自动加write锁
加锁{Lock tables 表名 read/write锁;}
解锁{unlock tables 表名;}
create table test1(
id int primary key auto_increment,
name varchar
)engine myisam charset utf8;
要建立两个连接才可以验证,所以一个人在图形画界面不能友好操作
一个人能可以建立两个黑窗口去验证事务和锁相关内容。