mysql中用EVENT事件定时改变表名,怎样避免在改表名的时候表被selcet,insert等操作锁表

数据库里有张名为data的表,每隔一段时间(几十秒钟)批量写入一次数据,等到晚上0点的时候通过mysql中的事件将data表名改为data201908xx(就是将每天的日期加上去),同时再建一张data表。目前想到几个问题,如下

1、如何避免在修改表名的时候,表被其他操作锁住,如这个时候正在批量写入数据;

2、从修改表名到新建data表,这段时间data表在数据库中不存在,怎样确保写数据时有表存在

希望大神能帮忙解答一下

1个回答

1.将data表改为data_temp表,并且在其基础上增加rktime字段用于记录每次数据插入的时间
2.编写mysql存储过程->创建data201908xx表,并且将data_temp表里前一天的数据记录迁移至data201908xx表中。
3.使用Event时间定时触发该存储过程。

d592571519
C君. 回复wen_xkang: 锁级别应该是行级锁而不是表级锁。
3 个月之前 回复
wen_xkang
wen_xkang 就是怎样确保event触发时,data_temp表没有执行insert操作,如果有就等待到空闲后执行,这个应该就需要事务控制了吧;我刚接触还不会这个,请问需要怎样做呢
3 个月之前 回复
wen_xkang
wen_xkang 回复C君.: 前面的都解决的,现在是事务控制做不来。请问怎样控制事务呢,我的java程序随机时间向data_temp中insert数据;当java在操作表的时候event也触发就会使存储过程执行失败
3 个月之前 回复
d592571519
C君. 回复wen_xkang: 怎么?问题还没解决?
3 个月之前 回复
d592571519
C君. 是,都在一个库里,事务也好控制
3 个月之前 回复
wen_xkang
wen_xkang 意思是data_temp表一直存在,只是每天定时将数据根据时间复制到data201908xx表中,然后删除data表中对应的数据,是吧;数据迁移使用这个么select * into data201908xx from data where .......
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!