MySQL中默认的数据库级别和事件级别是如何设置的?

avatar
作者
猴君
阅读量:0
MySQL 默认的数据库级别事件调度器是关闭的,需要手动开启。

MySQL 默认数据库级别与事件级别

MySQL中默认的数据库级别和事件级别是如何设置的?

事务四大特性(ACID)

1、原子性(Atomicity):事务包含的所有操作要么全部成功,要么全部失败回滚,如果操作成功,则必须完全应用到数据库;如果操作失败,则不能对数据库有任何影响。

2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏,A向B转账时,不可能A扣了钱而B没有收到。

3、隔离性(Isolation):当多个用户并发访问数据库时,每个用户的事务应该相互隔离,互不干扰,不同的事务之间彼此没有任何干扰。

4、持久性(Durability):一个事务一旦被提交,对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

事务的并发问题

1、脏读:事务A读取了事务B更新但未提交的数据,然后B回滚操作,那么A读取到的数据是脏数据。

2、不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。

3、幻读:幻读解决了不重复读的问题,保证了同一个事务里,查询的结果都是事务开始时的状态,事务T1对一个表中所有行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库,而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的。

事务隔离级别

1、读未提交(Read Uncommitted):允许一个事务读取另一个事务未提交的数据,可能导致脏读。

MySQL中默认的数据库级别和事件级别是如何设置的?

2、读提交(Read Committed):只允许事务读取已经提交的数据,避免了脏读,但可能出现不可重复读。

3、可重复读(Repeatable Read):在同一个事务内多次读取同一数据时,能够保证读取到的结果是一致的,即使其他事务对这些数据进行了修改或删除操作,可重复读隔离级别也不会受到影响。

4、串行化(Serializable):最高的隔离级别,强制事务串行执行,完全避免并发问题,但降低了并发性能。

MySQL 默认隔离级别

MySQL的默认隔离级别是可重复读(Repeatable Read),这种隔离级别在大多数情况下提供了良好的平衡,既能保证数据一致性,又能提供较好的并发性能。

如何设置隔离级别

可以通过以下命令来查看和设置隔离级别:

1、查看当前会话隔离级别SELECT @@tx_isolation;SELECT @@transaction_isolation;

2、查看全局隔离级别SELECT @@global.tx_isolation;SELECT @@global.transaction_isolation;

3、设置当前会话隔离级别SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;

MySQL中默认的数据库级别和事件级别是如何设置的?

4、设置全局隔离级别SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;

相关问题与解答

1、为什么选择可重复读作为MySQL的默认隔离级别?

回答:可重复读隔离级别在大多数情况下提供了一个良好的平衡,既能保证数据的一致性,又能提供较好的并发性能,它避免了脏读和不可重复读的问题,虽然无法解决幻读问题,但在实际应用中,通过适当的锁机制可以有效控制幻读的发生。

2、如何根据实际需求选择合适的隔离级别?

回答:在选择隔离级别时,需要根据实际业务需求和并发访问情况进行权衡,如果需要高并发性能且能接受一定的数据不一致风险,可以选择读提交隔离级别;如果需要保证数据的强一致性且并发性能要求不高,可以选择串行化隔离级别;而在大多数场景下,可重复读隔离级别是一个不错的选择,因为它在保证数据一致性的同时,也能提供较好的并发性能。

各位小伙伴们,我刚刚为大家分享了有关“mysql 默认数据库级别_事件级别”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!