MySQL自定义引擎:已经存在的数据

时间:2009-11-04 22:27:02

标签: mysql file

我正在探索自定义MySQL引擎是否能满足我的需求。我一直在关注http://forge.mysql.com/wiki/MySQL_Internals_Custom_Engine。我想知道的一件事是:我可以使用现有的(二进制)文件创建引擎吗?

如果是,我猜(?)没有“CREATE TABLE...”所以,MySQL如何知道这个表?

EDITED 假设我有一个工具写一个名为'records.bin'的大二进制文件,它是以下C结构的串联

    struct Record
    {
        char field1[10];
        int field2;
    };

我想编写一个自定义MySQL引擎来执行以下查询:

((declare table t1 as 'records.bin' exists somewhere ???))
select field1 from t1 where field2=1;

应该可以,正如文件所说:

  

最基本的存储引擎   实现只读表扫描。   这些引擎可能用于支持   日志和其他数据的SQL查询   在外面填充的文件   的MySQL。

2 个答案:

答案 0 :(得分:2)

是的,这是可能的。仅仅因为CREATE TABLE实际上在像myisam这样的传统存储引擎中创建文件并不意味着你必须这样做。

实际上,CSV存储引擎将在数据目录中使用现有的适当命名的CSV文件。如果该文件不存在,则会创建一个空白文件。

答案 1 :(得分:1)

如果“二进制文件”是指从mysql数据目录中删除的数据文件,我很怀疑你是否可以使用一个存储引擎创建的数据文件来填充另一个存储引擎中的表。

如果用“二进制文件”表示mysqldump,那么是的,那应该没问题。 Mysqldump应该包含一个create table语句 - 如果它没有,你可以自己做(做SHOW CREATE TABLE t并复制结果)。

您还可以使用ALTER TABLE t ENGINE = e;

在存储引擎之间移动表而不转储/重新加载它们