数据库-->事件

思想:?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;


要建立两个连接才可以验证,所以一个人在图形画界面不能友好操作

一个人能可以建立两个黑窗口去验证事务和锁相关内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字界陈冠希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值