1.SQLite只支持库级锁,同一时间只允许一个写操作,php默认是没有超时等待的。
int sqlite3_busy_timeout(sqlite3*, int ms);---->php调用:$db->busyTimeout($ms);
不注册此函数时默认超时等待为0,当ms<=0时,清除busy handle,申请不到锁直接返回;定义一个毫秒数,当未到达该毫秒数时,sqlite会sleep并重试当前操作,
如果超过ms毫秒,仍然申请不到需要的锁,当前操作返回SQLITE_BUSY;
很多人用这个函数没有成功,其实只要你仔细查看sqlite的源码就会发现,
这个函数实际上注册了一个默认的sqlite3_busy_handler(sqliteDefaultBusyCallback),而这个回调函数在你的编译
环境下可能使得第二个ms参数必需要大于1000( 只能是1000的整数倍)且是他的整数倍才有意义,由于此默认callback函数延时较大,建议自己写回
调函数然后用slite3_busy_handler注册,这样就可以自己用自己的延时函数或方法进行处理了.
2.SQlite 事务特性(定义了SQL 命令的边界):原子性,一致性、隔离性、持久性。
三个事务命令:BEGIN、COMMIT、ROLLBACK
五个不同状态的锁:unlocked 、shared 、reserved、 pending、 exclusive