原因如下:
功能dbDelta 可以接收为第一个参数($queries) 数组或字符串。如果$queries 是字符串,dbDelta 将使用“;”创建一个数组作为分隔符。
inside dbDelta
if ( !is_array($queries) ) {
    $queries = explode( \';\', $queries );
    $queries = array_filter( $queries );
}
 因此,解决方案是创建一个查询数组,而不是字符串作为第一个参数,如下所示:
myFunction(){
    ...
    $query_string = array(
        0 => "INSERT INTO {$table_name} {$str_column_names} VALUES {$str_values}"
    );
    dbDelta( $query_string ); 
}
 找到了答案
here.