MySQL Cross Server Select Query

Вы должны копировать с s до a, а не с a до s.

Также используйте fgets вместо gets и isspace для проверки пробелов.

#include <stdio.h>
#include <ctype.h>

int main() {
    char s[100];
    char a[100];

    fgets(s, 100, stdin);

    int i = 0;
    int j = 0;
    for (; s[i]; ++i) {
        if (!isspace(s[i])) {
            a[j] = s[i];
            ++j;
        }
    }
    a[j] = '\0'; 

    printf("%s\n", a);
    return 0;
}
26
задан Anand Shah 1 May 2009 в 06:00
поделиться

3 ответа

mysqldump может быть решением, как уже упоминалось, или вы можете попробовать использовать SELECT ... INTO OUTFILE , а затем LOAD DATA INFILE ... команды.

В MySQL есть механизм федеративного хранения, который может быть вам полезен. Вот еще немного документации об этом http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html Я должен признаться, что не добился большого успеха это, но это может сработать для вас.

Третье решение - сделать работу в вашем приложении. Читайте результаты запроса SELECT построчно и INSERT для другого сервера построчно. Однако вы можете столкнуться с некоторыми проблемами с типами данных и обработкой нуля.

8
ответ дан 28 November 2019 в 07:16
поделиться

Поскольку клиент mysql может одновременно подключаться только к одному серверу, короткий ответ - нет. Но всегда есть способ ...

Последние версии mysqldump поддерживает параметр - где , который можно использовать для ограничения сбрасываемых данных. Это означает, что у вас есть способ запустить простой SELECT (т.е. все столбцы в одной таблице) и создать действительный SQL для INSERT его. Затем вы можете направить вывод такой команды mysqldump для исходного сервера на команду mysql на целевой сервер.

Возможно, вы захотите включить несколько опций, например - no-create-info и - no-add-locks по команде mysqldump . Проверяйте это до тех пор, пока вы не получите именно то, что хотите.

2
ответ дан 28 November 2019 в 07:16
поделиться

как насчет использования объединенных таблиц на одном из серверов? create the federated tables based on the remote tables you will use in the query and just run your query as if your database was all local. example below from MySQL site

The procedure for using FEDERATED tables is very simple. Normally, you have two servers running, either both on the same host or on different hosts. (It is possible for a FEDERATED table to use another table that is managed by the same server, although there is little point in doing so.)

First, you must have a table on the remote server that you want to access by using a FEDERATED table. Suppose that the remote table is in the federated database and is defined like this:

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=MyISAM 
CHARSET=latin1;

The example uses a MyISAM table, but the table could use any storage engine.

Next, create a FEDERATED table on the local server for accessing the remote table:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

(Before MySQL 5.0.13, use COMMENT rather than CONNECTION.)

35
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: