本地数据库与远程数据库更新

lxq19851204 2011-10-17 10:04:25
本地数据库是主机,要从几个分店(远程数据库)拿出来,分店的IP是已知的。
目前的做法是在本地中把分店的数据生成一个TXT,然后在LOAD DATA进本地。

想问下大家有什么方法可以不用通过TXT,直接更新?
...全文
233 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinazl126 2012-02-06
  • 打赏
  • 举报
回复
正好在找这个问题,来学习学习
lxq19851204 2011-10-17
  • 打赏
  • 举报
回复

mysql> show engines;
+------------+---------+--------------------------------------------------------
--------+
| Engine | Support | Comment
|
+------------+---------+--------------------------------------------------------
--------+
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance
|
| MEMORY | YES | Hash based, stored in memory, useful for temporary tabl
es |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign k
eys |
| BerkeleyDB | NO | Supports transactions and page-level locking
|
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disa
ppears) |
| EXAMPLE | NO | Example storage engine
|
| ARCHIVE | YES | Archive storage engine
|
| CSV | NO | CSV storage engine
|
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables
|
| FEDERATED | YES | Federated MySQL storage engine
|
| MRG_MYISAM | YES | Collection of identical MyISAM tables
|
| ISAM | NO | Obsolete storage engine
|
+------------+---------+--------------------------------------------------------
--------+
12 rows in set (0.00 sec)
mysql>

有了呀,为什么不可以?
wwwwb 2011-10-17
  • 打赏
  • 举报
回复
1、SHOW ENGINES;
贴结果
如果 有FEDERATED,则在MYSQLD中加入
FEDERATED
2、如果没有,在MYSQL中
install plugin federated soname 'ha_federated.so';
3、重新编译MYSQL。
lxq19851204 2011-10-17
  • 打赏
  • 举报
回复
FEDERAL存储引擎怎么安装?
wwwwb 2011-10-17
  • 打赏
  • 举报
回复
在MYSQL中运行sCmd中的内容,提示什么,能否成功
wwwwb 2011-10-17
  • 打赏
  • 举报
回复
1、FEDERATED存储引擎安装没有;
2、用户名、密码是否正确,是否有访问的权限。


scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
只有mysql在这一点被支持为scheme,密码和端口号时可选的。

这里有一些连接字符串的例子:

CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
为指定连接字符串使用CONNECTION是非可选,并且在将来可能会改变。当你使用FEDERATED表的时候,要记得这个,因为这意味着当将来发生那种改变之时,可能被要求。

因为任何被用的密码作为纯文本被存在连接字符串中,它可以被任何使对FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用户,或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见。
ACMAIN_CHM 2011-10-17
  • 打赏
  • 举报
回复
不用你的程序,直接先在MYSQL命令行工具中试一下。另外FEDERAL存储引擎需要安装。
lxq19851204 2011-10-17
  • 打赏
  • 举报
回复
                    sSql = "Drop table if exists P_purchaseorderdetail"
lDCN.Execute sSql

sSql = "Create Table P_purchaseorderdetail ( ID INTEGER NOT NULL AUTO_INCREMENT,Inventoryid INTEGER ,QOH integer,"
sSql = sSql & "PRIMARY KEY (ID),INDEX Inventoryid(Inventoryid) ) ENGINE = InnoDB DEFAULT CHARSET=utf8;"
lDCN.Execute sSql

sSql = "Insert into P_purchaseorderdetail(InventoryID,QOH)"
sSql = sSql & " Select T.InventoryID,T.QOH "
sSql = sSql & " From (" & sCommand & ")T "
lDCN.Execute sSql

'***************************
sCmd = "Drop table if exists P1_purchaseorderdetail"
DCN.Execute sCmd

sCmd = "Create Table P1_purchaseorderdetail ( ID INTEGER NOT NULL AUTO_INCREMENT,Inventoryid INTEGER ,QOH integer,"
sCmd = sCmd & " PRIMARY KEY (ID),INDEX Inventoryid(Inventoryid) )ENGINE = FEDERATED "
sCmd = sCmd & " CONNECTION='mysql://broot:bsuntoyo@192.168.0.41:3306/masterdata/P_purchaseorderdetail'"
DCN.Execute sCmd

我这样设有问题吗?
为什么在本地打不开P1_purchaseorderdetail表,说不可以连接。
wwwwb 2011-10-17
  • 打赏
  • 举报
回复
如果你的数据只是多个表的话,考虑FEDERATED存储引擎,建立FEDERATED表,再更新主表

在host: 168.56.41.11建个FEDERATED 表

CREATE TABLE xxx_b (
id INT(20) NOT NULL AUTO_INCREMENT,
username VARCHAR(32) NOT NULL DEFAULT '',
password VARCHAR(32),
PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://broot:bpassword@268.56.71.11:3306/dbname/b表';
ACMAIN_CHM 2011-10-17
  • 打赏
  • 举报
回复
另外就是直接使用数据库复制功能。利用MYSQL本身来实现数据复制。
[Quote]
第6章:MySQL中的复制
目录

6.1. 复制介绍
6.2. 复制实施概述
6.3. 复制实施细节
6.3.1. 复制主线程状态
6.3.2. 复制从I/O线程状态
6.3.3. 复制从SQL线程状态
6.3.4. 复制传递和状态文件
6.4. 如何设置复制
6.5. 不同MySQL版本之间的复制兼容性
6.6. 升级复制设置
6.6.1. 将复制升级到5.0版
6.7. 复制特性和已知问题
6.8. 复制启动选项
6.9. 复制FAQ
6.10. 复制故障诊断与排除
6.11. 通报复制缺陷
6.12. 多服务器复制中的Auto-Increment
本章描述了MySQL提供的各种复制特性。引入了复制概念,显示如何设置复制服务器和服务以指导相应的复制选项。还提供了FAQ(以及答案) 列表,以及解决复制问题的排错建议。

关于复制相关的SQL语句的语法描述,参见13.6节,“复制语句”。

我们建议你经常访问我们的网址http://www.mysql.com,并检查对本章的修改。复制在不断地得到改进,我们用最新的信息定期更新本手册。

6.1. 复制介绍
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。(这与同步复制可以进行对比,同步复制是MySQL簇的一个特征—参见第17章:MySQL簇)。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

如果你想要设置链式复制服务器,从服务器本身也可以充当主服务器。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

· 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。参见5.9.1节,“数据库备份”。

6.2. 复制实施概述
MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。参见5.11.3节,“二进制日志”。

每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。

将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的主服务器上工作。并且,该语句将获得全局读锁定,因此当表正复制到从服务器上时,不可能在主服务器上进行更新。当我们执行表的无锁热备份时,则不再需要全局读锁定。

由于这些限制,我们建议只有主服务器上的数据集相对较小,或者主服务器上延迟读锁定已经被接受,才可以使用LOAD DATA FROM MASTER。而LOAD DATA FROM MASTER的实际速度随系统的不同而不同,对于执行时间,最好的规则是每1MB的数据用1秒钟。这是一个粗略的估计,但你会发现如果主服务器和从服务器的性能上等价于700MHz Pentium CPU,通过100Mbps的网络进行连接,则该估计相当准确。

从服务器设置为复制主服务器的数据后,它连接主服务器并等待更新过程。如果主服务器失败,或者从服务器失去与主服务器之间的连接,从服务器保持定期尝试连接,直到它能够继续帧听更新。由--master-connect-retry选项控制重试间隔。 默认为60秒。

每个从服务器跟踪复制时间。主服务器不知道有多少个从服务器或在某一时刻有哪些被更新了。

6.3. 复制实施细节
6.3.1. 复制主线程状态
6.3.2. 复制从I/O线程状态
6.3.3. 复制从SQL线程状态
6.3.4. 复制传递和状态文件
MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服

[/Quote]
ACMAIN_CHM 2011-10-17
  • 打赏
  • 举报
回复
可以创建FEDERAL存储引擎,类似于TABLE LINK 到远程的分店数据库。(你的IP已知), 然后直接通过SQL语句进行操作。或者再创建MERGE存储引擎表。


[Quote]
15.7. FEDERATED存储引擎
15.7.1. 安装FEDERATED存储引擎

15.7.2. FEDERATED存储引擎的介绍

15.7.3. 如何使用FEDERATED表

15.7.4. FEDERATED存储引擎的局限性

FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。

FEDERATED存储引擎仅在-MAX版的MySQL上可用。

要为FEDERATED引擎检查源码,请查看MySQL源码分发版的sql目录。

对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。

15.7.1. 安装FEDERATED存储引擎
要允许这个存储引擎,当你构建MySQL时请使用--with-federated-storage-engine来configure。

15.7.2. FEDERATED存储引擎的描述
当你创建一个FEDERATED表的时候,服务器在数据库目录创建一个表定义文件。文件由表的名字开始,并有一个.frm扩展名。无其它表被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。

对于本地的数据录表,数据文件是本地的。例如,如果你创建一个名为user的MyISAM表,MyISAM处理器创建一个名为users.MYD的数据文件。对本地表读,插入,删除和更新在本地数据文件里的数据的处理器和记录被以对处理器的特定格式存储。为了读记录,处理器必须把数据分解进列。为了写记录,列值必须被转换到被处理器使用的行格式并且被写进本地的数据文件。

使用MySQL FEDERATED存储引擎,没有对表的本地数据文件(比如,没有.MYD文件)。取而代之地,一个远程数据库存储那些正常地应该在表中的数据。这使得MySQL客户端API来读,删除,更新和插入数据的使用成为必要。数据取回被通过SELECT * FROM tbl_name SQL语句来初始化。要读这个结果,通过使用mysql_fetch_row() C API函数,行被一次取一个,然后从SELECT结果包中的列转换成FEDERATED处理器期望的格式。

基本流程如下:

1. SQL调用被本地发布

2. MySQL处理器API (数据以处理器格式)

3. MySQL客户端API (数据被转换成SQL调用)

4. 远程数据库-> MySQL客户端API

5. 转换结果包(如果有的话)到处理器格式

6. 处理器 API -> 结果行或受行影响的对本地的计数

15.7.3. 如何使用FEDERATED表
使用FEDERATED表的步骤是非常简单的。通常,你运行两个服务器,要么在同一个主机上,要么在不同主机上。(一个FEDERATED表使用其它被同一服务器管理的表也是可能的。虽然只有极少的点要这么做)。

首先,你必须在你想要用FEDERATED表访问的远程服务器上有一个表。假设,远程的表在FEDERATED数据库中并且被如下定义:

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),
KEY name (name),
KEY other_key (other)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;
ENGINE表选项可能命名任何存储引擎,该表需要不是一个MyISAM表。

接着,在本地服务器上为访问远程表创建一个FEDERATED表:

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),
KEY name (name),
KEY other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@remote_host:9306/federated/test_table';
(注意: CONNECTION 替代 用在先前版本的MySQL里的COMMENT)。

除了ENGINE表选项应该是FEDERATED,并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外,这个表的结构必须完全与远程表的结构相同。

FEDERATED引擎仅创建在已联盟数据库中的test_table.frm文件。

远程主机信息指明本地服务器要连接到的远程服务器,数据库和表信息指明哪一个远程表要被作为数据文件来用。在这个例子中。远程服务器被指定来作为远程主机在9306端口上运行,所以你要启动服务器,让它监听9306端口。

在CONNECTION选项中的连接字符串的一般形式如下:

scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
只有mysql在这一点被支持为scheme,密码和端口号时可选的。

这里有一些连接字符串的例子:

CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
为指定连接字符串使用CONNECTION是非可选,并且在将来可能会改变。当你使用FEDERATED表的时候,要记得这个,因为这意味着当将来发生那种改变之时,可能被要求。

因为任何被用的密码作为纯文本被存在连接字符串中,它可以被任何使对FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用户,或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见。

对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。

15.7.4. FEDERATED存储引擎的局限性
FEDERATED支持及不支持的如下:

· 在第一个版本中,远程服务器必须是一个MySQL服务器。FEDERATED对其它数据库引擎的支持可能会在将来被添加。

· FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。

· 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。

· 没有对事务的支持。

· 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。

· FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。它不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。

· 执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。

· FEDERATED表不能对查询缓存不起作用。

这些限制中的一些在FEDERATED处理机的将来版本可能被消除。




[/Quote]
[Quote]
15.3. MERGE存储引擎
15.3.1. MERGE表的问题

MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩。请参阅8.2节,“myisampack — 生成压缩的只读MyISAM表”。表选项的差异,比如AVG_ROW_LENGTH, MAX_ROWS或PACK_KEYS都不重要。

当你创建一个MERGE表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为MERGE表自身,不必要在同一个数据库中。

你可以对表的集合用SELECT, DELETE, UPDATE和INSERT。你必须对你映射到一个MERGE表的这些表有SELECT, UPDATE和DELETE 的权限。

如果你DROP MERGE表,你仅在移除MERGE规格。底层表没有受影响。

当你创建一个MERGE表之时,你必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个来用。如果你想要对MERGE表的插入发生在UNION列表中的第一个或最后一个表上,你可以选择地指定一个INSERT_METHOD选项。使用FIRST或LAST值使得插入被相应地做在第一或最后一个表上。如果你没有指定INSERT_METHOD选项,或你用一个NO值指定该选项。往MERGE表插入记录的试图导致错误。

下面例子说明如何创建一个MERGE表:

mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。

创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:

mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |
+---+---------+
注意,你也可以直接从MySQL之外直接操作.MRG文件:

shell> cd /mysql-data-directory/current-database
shell> ls -1 t1 t2 > total.MRG
shell> mysqladmin flush-tables
要重映射一个MERGE表到一个不同的MyISAM表集,你可以执行下列之一:

· DROP MERGE表并且重建它。

· 使用ALTER TABLE tbl_name UNION=(...)来改变底层表的列表。

· 改变.MRG文件,并对MERGE表或者所有底层表发出一个FLUSH TABLE语句来强制存储引擎去读新的定义文件。

MERGE表可以帮你解决以下问题:

· 容易地管理一套日志表。比如,你可以把不同月的数据放进分离的表中,用myisampack压缩其中的一些,并随后创建一个MERGE表来把它们当作一个来使用。

· 获得更快的速度。你可以以一些标准来分割大的只读表,然后放进不同磁盘上的单个表中。基于此的一个MERGE表可比使用大表要快得多。

· 执行更有效的搜索。如果你确切知道要搜索什么,对一些查询你可以只在被分割的表的其中之一来搜索,并且对其它使用MERGE。你甚至有许多不同的MERGE表,它们使用有重叠的表套。

· 执行更有效的修补。修补被映射到一个MERGE表中的单个表比修补单个大型表要更轻松。

· 即刻映射许多表成一个。MERGE表不需要维护它自己的索引,因为它使用大哥表的所用。因此,MERGE表集合是非常块地创建或重映射。(注意,当你创建一个MERGE表之时,即使没有索引被创建,你必须仍然指定索引定义)。

· 如果根据需要或按照批次,你有一组要合起来作为一个大表的表,你应该根据需要对它们创建一个MERGE表来替代大表。这样要快得多而且节约大量的磁盘空间。

· 超过操作系统的文件尺寸限制。每个MyISAM表都受制于这个限制,但是一个MyISAM表的集合则不然。

· 你可以通过定义一个映射到单个表的MERGE表来为一个MyISAM表创建一个别名或“同物异名”。这样做应该没有真实的可察觉的性能影响 (对每个读只有一些间接调用和memcpy()调用)。

MERGE表的缺点:

· 你可以对MERGE表使用仅相同的MyISAM表。

· 你不能在MERGE表中使用很多MyISAM功能。比如,你不能在MERGE表上创建FULLTEXT索引。(当然,你可以在底层MERGE 表上创建FULLTEXT索引,但是你不能用全文搜索来搜索MERGE表)。

· 如果MERGE表是非临时的,所有底层MyISAM表也必须是永久的。如果MERGE表是临时的,MyISAM表可以是任何临时&非临时的混合。

· MERGE表使用更多的文件描述符。如果是个客户端正使用一个映射到10个表的MERGE表,服务器使用(10*10)+10个文件描述符。(10个数据文件描述符给10个客户端每人一个,并且在客户端之间共享10个索引文件描述符)。

· 键读会更慢。当你读一个键的时候,MERGE存储引擎需要在所有 底层表上发出一个读以检查哪一个接近匹配给定的键。如果你随后做了一个read-next,MERGE存储引擎需要搜索读缓冲来找出下一个键。只有当一个键缓冲被耗尽,存储引擎才需要读下一个键块。这使得MERGE键在eq_ref搜索中非常慢,但在ref搜索中不是太慢。请参阅7.2.1节,“EXPLAIN 语法(获取SELECT相关信息)” 以获得更多关于eq_ref和ref的信息。

15.3.1. MERGE表方面的问题
下列是已知关于MERGE表的问题:

· 如果你使用ALTER TABLE 来把MERGE表变为其它表类型,到底层表的映射就被丢失了。取而代之的,来自底层MyISAM表的行被复制到已更换的表中,该表随后被指定新类型。

· REPLACE不起作用。

· 没有WHERE子句,或者在任何被映射到一个打开的MERGE表上的任何一个表上的REPAIR TABLE,TRUNCATE TABLE, OPTIMIZE TABLE或ANALYZE TABLE,你不能使用DROP TABLE, ALTER TABLE, DELETE FROM。如果你这么做了,MERGE表将仍旧指向原始表,这样产生意外结果。解决这个不足最简单的办法是在执行任何一个这些操作之前发出一个FLUSH TABLES语句来确保没有MERGE表仍旧保持打开。

· 一个MERGE表不能在整个表上维持UNIQUE约束。当你执行一个INSERT, 数据进入第一个或者最后一个MyISAM表(取决于INSERT_METHOD选项的值)。MySQL确保唯一键值在那个MyISAM表里保持唯一,但不是跨集合里所有的表。

· 当你创建一个MERGE表之时,没有检查去确保底层表的存在以及有相同的机构。当MERGE表被使用之时,MySQL检查每个被映射的表的记录长度是否相等,但这并不十分可靠。如果你从不相似的MyISAM表创建一个MERGE表,你非常有可能撞见奇怪的问题。

· 在MERGE表中的索引的顺序和它的底层表中的索引应该一样。如果你使用ALTER TABLE给一个被用在MERGE表中的表添加一个UNIQUE索引,然后使用ALTER TABLE在MERGE表上添加一个非唯一索引,如果在底层表上已经有一个非唯一索引,对表的索引排序是不同的。(这是因为ALTER TABLE把UNIQUE索引放在非唯一索引之前以利于重复键的快速检测 )。因此对使用这样索引的表的查询可能返回不期望的结果。

· 在Windows中,在一个被MERGE表使用的表上DROP TABLE不起作用,因为MERGE引擎的表映射对MySQL的更上层隐藏。因为Windows不允许已打开文件的删除,你首先必须刷新所有MERGE表(使用FLUSH TABLES)或在移除该表之前移除MERGE表。

对于MERGE存储引擎,在http://forums.mysql.com/list.php?93上有一个专门的论坛。


[/Quote]
lxq19851204 2011-10-17
  • 打赏
  • 举报
回复
命令测试通过,谢谢楼上2位大神~~亲
WWWWA 2011-10-17
  • 打赏
  • 举报
回复
本地MYSQL:
CREATE TABLE `a` (
`tid` INT(6) NOT NULL AUTO_INCREMENT,
`subject` VARCHAR(20) DEFAULT NULL,
UNIQUE KEY `tid` (`tid`),
KEY `tt` (`tid`,`subject`)
) ENGINE=FEDERATED
CONNECTION='mysql://aa:123@192.167.0.1:3306/ee/a'
ee:数据库名
a:表名
WWWWA 2011-10-17
  • 打赏
  • 举报
回复
在远程MYSQL上建立用户,假设aa
grant all privileges on *.* to aa@'192.167.0.1' identified by "123";

CREATE TABLE `a` (
`tid` INT(6) NOT NULL AUTO_INCREMENT,
`subject` VARCHAR(20) DEFAULT NULL,
UNIQUE KEY `tid` (`tid`),
KEY `tt` (`tid`,`subject`)
) ENGINE=FEDERATED
CONNECTION='mysql://aa:123@192.167.0.1:3306/ee/a'
ee:数据库名
a:表名
ACMAIN_CHM 2011-10-17
  • 打赏
  • 举报
回复
[Quote]不用你的程序,直接先在MYSQL命令行工具中试一下。[/Quote]
wwwwb 2011-10-17
  • 打赏
  • 举报
回复
CREATE TABLE `a` (
`tid` INT(6) NOT NULL AUTO_INCREMENT,
`subject` VARCHAR(20) DEFAULT NULL,
UNIQUE KEY `tid` (`tid`),
KEY `tt` (`tid`,`subject`)
) ENGINE=FEDERATED
CONNECTION='mysql://root:123@192.167.0.1:3306/ee/a'

测试通过,检查你的用户名及密码,root:123@192.167.0.1
引擎已经安装

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧