Несколько первичных ключей в схеме - PullRequest
4 голосов
/ 17 августа 2010

У меня есть эта схема, мне нужно определить два первичных ключа; одно из них - поле 'vid' в Drupal, а другое - поле 'bid' моего сайта, которое имеет тип автоинкремента, который в свою очередь требует, чтобы он был первичным ключом: в противном случае я получаю ошибку MySQL. У меня проблемы с поиском синтаксиса для определения нескольких первичных ключей в схеме Drupal. Если кто-то может помочь мне с синтаксисом, я очень ценю это.

$schema['rft'] = array(
    'fields' => array(
        'vid' => array(
            'type' => 'int',
            'unsigned' => TRUE,
            'not null' => TRUE,
            'default' => 0,
        ),
        'nid' => array(
            'type' => 'int',
            'unsigned' => TRUE,
            'not null' => TRUE,
            'default' => 0,
        ),
        'bid' => array(
            'type' => 'serial',
            'size' => 'medium',
            'not null' => TRUE,                         
        ),

    ),
    'indexes' => array(
        'nid' => array('nid'),
    ),
    'primary key' => array('vid'),  //array('vid','bid') doesn't work
);

return $schema;
}

1 Ответ

8 голосов
/ 17 августа 2010

Использование следующего прекрасно работало для меня.Может быть, это ограничение версии MySQL?Можете ли вы сообщить реальное сообщение об ошибке, которое вы получили, когда Drupal пытался создать эту таблицу?

$schema['rft'] = array(
    'fields' => array(
        'vid' => array(
            'type' => 'int',
            'unsigned' => TRUE,
            'not null' => TRUE,
            'default' => 0,
        ),
        'nid' => array(
            'type' => 'int',
            'unsigned' => TRUE,
            'not null' => TRUE,
            'default' => 0,
        ),
        'bid' => array(
            'type' => 'serial',
            'size' => 'medium',
            'not null' => TRUE,                         
        ),

    ),
    'indexes' => array(
        'nid' => array('nid'),
    ),
    'primary key' => array('vid', 'bid'),
);
...