2015-02-16 3 views
0

Я хочу создать таблицу, чтобы иметь идентификационный номер, основанный на дате, И идентификатор как уникальный первичный ключ.Создание автоматически увеличивающихся чисел с двумя столбцами

Ie:

2015-2-1-1 
2015-2-1-2 

, но, если я создаю:

2015-2-2-1 

счетчик должен перезапустить на 1.

Я попытался с помощью следующих действий:

CREATE TABLE `invoices` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `date` date NOT NULL, 
    `po_id` int(11) unsigned DEFAULT NULL, 
    `description` varchar(256) NOT NULL, 
    `client_id` int(11) unsigned DEFAULT NULL, 
    `status` enum('unpaid','paid','partial') DEFAULT 'unpaid', 
    PRIMARY KEY (`id`,`date`), 
    UNIQUE KEY `id_UNIQUE` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1; 

Но это не так Орк, как я хочу.

ответ

0

Если вам нужен первичный ключ с двумя столбцами (дата, идентификатор) и идентификатор, который должен автоматически увеличиваться, начиная с 1 каждой даты. Просто установите date, для основного ключа столбца и id во второй позиции в определении вашего ключа.

CREATE TABLE `invoices` (
    `date` date NOT NULL, 
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `po_id` int(11) unsigned DEFAULT NULL, 
    `description` varchar(256) NOT NULL, 
    `client_id` int(11) unsigned DEFAULT NULL, 
    `status` enum('unpaid','paid','partial') DEFAULT 'unpaid', 
    PRIMARY KEY (`date`, `id`) 
) ENGINE=MyIsam DEFAULT CHARSET=latin1; 

Внутренний ключ будет установлен в качестве примера, но вы увидите две колонки:

+----+------------+ 
| id | date  | 
+----+------------+ 
| 1 | 2012-01-01 | 
| 2 | 2012-01-01 | 
| 1 | 2012-01-02 | 
| 2 | 2012-01-02 | 
+----+------------+ 

EDIT: Вы должны использовать формат MyISAM

+0

спасибо! Есть ли проблемы с выполнением чего-то подобного? Следует ли его избегать или все в порядке? –

+1

Не было бы проблем с производительностью, главной проблемой будет удобство использования двойного ключа для редактирования/сохранения/удаления данных (т. Е. Предоставления двух информационных данных для доступа к одной строке). – Adam

+0

У меня будет что-то вроде invoice_items для хранения элементов принадлежащих счету. Будет ли проблематично присоединиться к этим двум? Или это просто вопрос использования двух соединений для даты и идентификатора? –