例如用户使用CREATE … SELECT语句,而这个语句回滚了又重新执行,备库有可能先收到一个CREATE语句,但是没收到INSERT的Events,主库重做一遍之后,备库收到CREATE语句时就会失败,而CREATE OR REPLACE则可以避免这个问题,存在的表会被替换掉。

    最基本的使用例子:

    这个语句其实等价于:

    1. CREATE TABLE table_name (a int);
    • 临时表只有在指定了TEMPORARY关键字时才会被DROP掉。(用DROP TABLE的话,同名的临时表会比普通表先被删除)

    使用CREATE OR REPLACE TABL必须意识到的问题:

    • OR REPLACE和IF EXISTS语句不可同时使用

    相关的新增参数:

     slave_ddl_exec_mode

      在 IDEMPOTENT 模式下,Slave不会因为那些不会导致主备不一致的DDL执行失败而停止。

      尤其是CREATE TABLE 会被当做 CREATE OR REPLACE TABLE,而 DROP TABLE 会被当做DROP TABLE IF EXISTS.

     默认值: IDEMPOTENT