1、原题
1.1、英文原题
On a master server that is using statement-based replication, a table of log data has become very large. You decide to delete 100,000 rows.
Which two methods can be independently invoked to ensure that the delete is properly propagated to the slave?
A、If the data modification is non-deterministic, the query optimizer will resolve any potential issues.
B、Use the LIMIT clause to limit the deletion to 100,000 rows
C、Use the LIMIT clause in conjunction with the ORDER BY clause
D、Change the replication mode to MIXED before issuing any delete statements when the LIMIT clause is used.
1.2、中文翻译
在使用基于语句的复制的主服务器上,日志数据表变得非常大。您决定删除100000行。
哪两种方法可以独立调用,以确保删除正确地传播到从属服务器?
A、 如果数据修改是不确定的,那么查询优化器将解决任何潜在的问题。
B、 使用LIMIT子句将删除限制为100000行
C、 将LIMIT子句与ORDER BY子句结合使用
D、 在使用LIMIT子句时,在发出任何删除语句之前,请将复制模式更改为MIXED。
1.3、答案
C、D
2、题目解析
2.1、题干解析
本题考察的是MySQL的主从复制。
2.2、选项解析
- 由于LIMIT子句存在选择哪些行进行操作的问题,因此主从复制时可能出现问题。如果是基于语句的复制,则肯定出现问题,解决办法是加上order by条件。也可以将复制模式改为基于行或者MIXED,MIXED模式在遇到LIMIT子句时会使用基于行的方式。所以选项C、D正确。
3、知识点
3.1、知识点1:主从复制和LIMIT子句
由于LIMIT子句存在选择哪些行进行操作的问题,因此主从复制时可能出现问题:
- 在基于语句的复制模式下,在DELETE、UPDATE和INSERT … SELECT语句中基于语句的LIMIT子句的复制是不安全的,因为没有定义受影响行的顺序。只有当这些语句还包含ORDER BY子句时,才可以用基于语句的复制来正确复制。
- 在基于行的复制模式下,对包含LIMIT子句的复制是安全的。
- 当使用MIXED模式时,含有LIMIT子句会自动使用基于行的模式进行复制。
4、总结
- 由于LIMIT子句存在选择哪些行进行操作的问题,因此在主从复制时可能出现问题。
- 如果是基于语句的复制,则肯定出现问题,解决办法是加上order by条件。
- 如果是基于行或的复制者MIXED,则不会存在问题。MIXED模式在遇到LIMIT子句时会使用基于行的方式。