数据不同步的异常情况通常出现在,在同一时刻有多个写数据的操作发生。因此要避免数据库的数据不同步这个问题,就要避免同时有多个写数据的操作,同时只能有一个写操作。
这在一台服务器运行的时候似乎是没有问题的,但是如果多台web服务器的话,就出现问题了。
一个不错的办法就是,可以将读写分离,所有的读操作都可以直接从数据库服务器当中读出。但写操作,一般web服务器没有这个权限,如果需要写那就需要设定一个专门负责写数据库的代理服务器,让所有web服务器的写操作都通过这个有写数据库权限的代理服务器,让写操作不存在并行,而是串行,同时只能对一个数据进行一个写操作。
Mysql默认引擎在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。
以上对于博主来说尚且还为理论,未实际实验过。