Wenn Sie einen Handler erzeugt haben, werden Sie normalerweise als Nächstes eine Tabelle anlegen.
      Hierzu muss Ihre Speicher-Engine die virtuelle Funktion
      create()
      implementieren:
    
virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0;
Diese Funktion sollte alle notwendigen Dateien erzeugen, muss jedoch nicht die Tabelle öffnen. Darum wird sich später der MySQL Server kümmern.
      Der Parameter *name ist der Tabellenname und
      der Parameter *form ist eine
      TABLE-Struktur, welche die Tabelle definiert
      und den Inhalt der zuvor bereits vom MySQL Server angelegten
      tablename.frmtablename.frm
      Der Parameter *info ist eine Struktur, die
      Informationen über die CREATE TABLE-Anweisung
      enthält, mit welcher die Tabelle angelegt wurde. Diese in
      handler.h definierte Struktur geben wir hier
      für Sie wieder:
    
typedef struct st_ha_create_information
{
    CHARSET_INFO *table_charset, *default_table_charset;
    LEX_STRING connect_string;
    const char *comment,*password;
    const char *data_file_name, *index_file_name;
    const char *alias;
    ulonglong max_rows,min_rows;
    ulonglong auto_increment_value;
    ulong table_options;
    ulong avg_row_length;
    ulong raid_chunksize;
    ulong used_fields;
    SQL_LIST merge_list;
    enum db_type db_type;
    enum row_type row_type;
    uint null_bits;                       /* NULL-Bits am Anfang des Datensatzes */
    uint options;				/* OR von HA_CREATE_-Optionen */
    uint raid_type,raid_chunks;
    uint merge_insert_method;
    uint extra_size;                      /* Länge des zusätzlichen Datensegments */
    bool table_existed;                /* 1 in create, falls Tabelle bereits vorhanden */
    bool frm_only;                        /* 1, wenn kein ha_create_table() */
    bool varchar;                         /* 1, wenn die Tabelle eine VARCHAR-Spalte hat */
} HA_CREATE_INFO;
      Eine einfache Speicher-Engine kann den Inhalt von
      *form and *info ignorieren,
      denn im Grunde genügt es, die von der Speicher-Engine benutzten
      Datendateien anzulegen und gegebenenfalls zu initialisieren
      (vorausgesetzt, die Speicher-Engine arbeitet mit Dateien).
    
      Das folgende Beispiel zeigt die Implementierung der
      Speicher-Engine CSV:
    
int ha_tina::create(const char *name, TABLE *table_arg,
  HA_CREATE_INFO *create_info)
{
    char name_buff[FN_REFLEN];
    File create_file;
    DBUG_ENTER("ha_tina::create");
  
    if ((create_file= my_create(fn_format(name_buff, name, "", ".CSV",
          MY_REPLACE_EXT|MY_UNPACK_FILENAME),0,
          O_RDWR | O_TRUNC,MYF(MY_WME))) < 0)
    DBUG_RETURN(-1);
  
    my_close(create_file,MYF(0));
 
    DBUG_RETURN(0);
}
      Im obigen Beispiel kümmert sich die CSV-Engine
      gar nicht um die *table_arg- oder
      *create_info-Parameter, sondern legt einfach
      die erforderlichen Datendateien an, schließt sie wieder und kehrt
      zurück.
    
      Die Funktionen my_create und
      my_close sind Hilfsfunktionen. Ihre Definition
      steht in src/include/my_sys.h.
    
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

