数据库的事务
参考文章(https://www.cnblogs.com/takumicx/p/9998844.html)
数据库的事务主要是指原子性,一致性,隔离性,持久性。
原子性指的是事务中所包含的操作要么全部都执行要么全部都不执行。
一致性指的是一个事务中,事务前后数据的完整性必须保持一致
隔离性指的是多个用户并发访问数据库时,一个用户的事务不受其他用户的影响,多个并发事务之间的数据要相互隔离
持久性指的是事务一旦被提交,他对数据库中数据的改变是永久的,不会再改变,即使后来数据库发生故障也不会它有影响。
Mysql数据库的两种引擎MyISAM和InnoDB
MyISAM是mysql数据库默认的引擎,它不提供对数据库事务的支持,且不支持行锁和外键,与InnoDB相比,在进行insert插入操作和update操作时,MyISAM会锁住整张表,所以效率相比较而言会低一些。但是MyISAM中存储了行数,当进行select count(*) from table 时,不会进行全表扫描,如果读操作比写操作要多且不需要数据库的事务支持,那么MyISAM是个不错的选择。
InnoDB提供了对数据库事务的支持,且提供了四种事务隔离级别,Mysql数据库启动时,InnoDB索引会创建一个缓冲池,用于存储数据和索引,但是该引擎不支持FULLTEXT类型的数据类型,而且它没有保存表的行数,当进行select count(*) from table;操作时,会对全表进行扫描。当需要提供数据库的事务的支持时,应当首选InnoDB。由于InnoDB的锁的颗粒度更小,因此在进行写操作不会锁住整张表,在高并发的条件下,使用InnoDB引擎会可以提高性能,但是行锁的使用也不是绝对的,当执行一条sql语句时,mysql数据库不确定扫描范围就会锁住整张表。