MySQL Error number: 3775; Symbol: ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION; SQLSTATE: HY000

文档解释

Error number: 3775; Symbol: ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION; SQLSTATE: HY000

Message: Statement violates GTID consistency: ALTER TABLE … ADD COLUMN .. with expression as DEFAULT.

ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION是MySQL数据库定义出来的警告错误。此刻错误是由于使用了非GTID可用的语句导致的。

错误说明:

MySQL数据库的ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION错误,通常意味着使用的MySQL语句无法在Global Transaction ID (GTID)模式下执行,此错误码为 3775。 具体来说,就是在GTID模式加入了一个新列时,如果是修改语句,并且带有DEFAULT type expression, 那么就会报出该错误,因为MySQL无法确切的计算该表结构发生变更时,默认值被计算得出来。

常见案例:

一个典型的ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION错误案例是某些MySQL复制出现停滞时,出现该错误。 如果客户端正在使用GTID模式,当需要执行ALTER语句以改变表的结构时,如果同时需要增加一个带有默认值的列并且该语句实际上被多次执行,则在大多数情况下,它会出现停滞错误。

解决方法:

为了解决 ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION 错误,首先,要保证在执行ALTER语句时,使用的是GTID可用的语句,而不是添加了DEFAULT的type expression的语句,以避免发生误差。其次,可以使用临时表,将表结构,数据等都拷贝到临时表,再基于临时表对正式表的修改,最后,再将临时表的内容导回正式表,这样就可以很well的解决 GTID不可用的问题。

你可能感兴趣的