Mysql:事务、锁表
事务:
MyISAM存储引擎是一个非事务型的存储引擎,InnoDB是一个事务型的存储引擎
事务表特点:
- 更安全,即时Mysql崩溃或者硬件问题,也可以数据备份,通过日志可以自动回复
- 如果自动提交被禁用,可以在同一时间提交更多的语句,可以执行ROLLBACK(回滚)来忽略更改
- 如果更新失败,所有的变化将被还原,非事务性表,所有发生都是永久的
- 对于并发访问能提供更好的并发表
非事务性表特点:
- 更快
- 对磁盘空间的要求低
- 执行更新时更低的内存要求
锁定表:
mysql中所有锁定不会成为死锁.
- wirte锁定: mysql的锁定原理:a:如果表没有锁定,那么锁定;b否则,把锁定请求放入写锁定队列中
- read锁定: mysql的锁定原理:a:如果表没有锁定,那么锁定;b否则,把锁定请求放入读锁定队列中
有时候会在一个表中进行很多的select,insert操作,可以在一个临时表中插入行并且偶尔用临时表的记录更新真正的表
- 用
low_priority
属性给一个特定的insert,update或者delete较低的优先级 max_write_lock_count
指定一个值(通常很小)来启动mysqld,使得在一定数量的write锁定之后出现read锁定- 通过使用
set sql_low_priority_updates=1
可以从一个特定的线程指定所有的更改应该由较低的优先级完成 - 用
high_priority
指定一个select
- 如果使用insert、selec出现问题,使用myisam表,因为它支持因为它支持并发的select和insert