Table ‘.\Tablename\posts’ is marked as crashed and should be repaired

昨天好好的突然服务器挂了,死活访问不了,马上重启一下。还是不能访问,查看tomcat日志文件,很多Table ‘.\Tablename\posts’ is marked as crashed and should be repaired这个错误。这是第一次遇到这个问题。首先排除改动代码引起的,因为最近没有更新过程序。

当时第一想法是先让服务跑起来再说,免得造成用户流失,然而不是那么顺利,死活都访问不了。网上搜索资料都是说数据库中表损坏之类的答案,可是服务器应该硬件是安全的不可能突然断电之类的问题。网上有很多修复的方法,暂时不敢用,问题的原因没找到如果乱搞数据库可能会引起更多的问题。搞不好数据丢失就麻烦了。我那个数据库资源有限没有做什么备份之类的,突然想起前段时间看到服务器硬盘空间好像不是很大了。会不会是硬盘满了呢,马上df -h查看,果然剩余空间0,马上清掉一些文件。重启机器,重启后还是不能访问,使用Navicat Premium的repaired fast修复已经,重启tomcat。oooo起来了

–每天一点点

sqlite的insert or update实现

通常需要插入一个记录的时候我们需要先判断在表中是否已经存在,如果存在则直接更新这条记录。
一半情况下我们会做两步操作,先通过select语句查询符合条件的记录条数,如果大于或等于1则代表记录存在。如果记录存在则使用update语句进行更新操作。

今天发现sqllite里面多少个replace的命令,可以用来替换已存在的记录。

INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg)VALUES(?,?,?,?,?,?,?,?,?);

这个语句的作用是插入一记录,如果已存在则替换

但是使用的时候我们可能会遇到一个问题,当我们需要保留一些字段的值的时候,也就是局部更新,我们需要用下面的语句来实现

INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg,readed)VALUES(?,?,?,?,?,?,?,?,?,(select readed from MESSAGEINFO where id = ?));

–每天一点点