2017-02-06 23 views
1

У меня есть таблица Invoices, которые имеют некоторые некоторые поля как InvoiceId, Customer, Number Я хочу, чтобы поле Number быть автоинкрементным, но на customer это Exemple, что это будет выглядеть для ExempleMysql автоинкрементного клиентом

InvoiceId| Customer| Number 
:------- | ------: | :----: 
258  | A  | 1 
2568  | B  | 1 
85475 | B  | 2 
63  | B  | 3 
64  | A  | 2 
65  | B  | 4 
67  | C  | 1 
+0

Интересный вопрос. Что вы пробовали до сих пор? Куда вы застряли? –

ответ

1

Это представляется возможным only using MyISAM storage engine:

MyISAM Примечание

Для таблиц MyISAM, можно указать AUTO_INCREMENT на вторичную колонке индекса в нескольких столбцов. В этом случае сгенерированное значение для столбца AUTO_INCREMENT вычисляется как MAX (auto_increment_column) + 1 WHERE prefix = заданный префикс. Это полезно, когда вы хотите поместить данные в упорядоченные группы.

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL, 
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (grp,id) 
) ENGINE=MyISAM; 

INSERT INTO animals (grp,name) VALUES 
    ('mammal','dog'),('mammal','cat'), 
    ('bird','penguin'),('fish','lax'),('mammal','whale'), 
    ('bird','ostrich'); 

SELECT * FROM animals ORDER BY grp,id; 

Который возвращает:

+--------+----+---------+ 
| grp | id | name | 
+--------+----+---------+ 
| fish | 1 | lax  | 
| mammal | 1 | dog  | 
| mammal | 2 | cat  | 
| mammal | 3 | whale | 
| bird | 1 | penguin | 
| bird | 2 | ostrich | 
+--------+----+---------+ 

В этом случае (если столбец AUTO_INCREMENT является частью индекса в несколько столбцов), значения AUTO_INCREMENT повторно используются при удалении строки с наибольшим AUTO_INCREMENT значение в любой группе. Этот происходит даже для таблиц MyISAM, для которых значения AUTO_INCREMENT обычно не используются повторно.

акцент мой.

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

+0

Действительно, InnoDB может иметь только один автоинкремент, и это должен быть первичный ключ. Но должен ли быть способ сделать вставку с max() + 1 где-нибудь? –

+0

Это говорит, что я не знаю, как innoDB будет обрабатывать auto-increment (int) + другой тип данных, как в качестве первичного ключа. –

2
ALTER TABLE tablename CHANGE number number INT(11) AUTO_INCREMENT PRIMARY KEY; 

, если изменение не будет работать, то попробуйте ИЗМЕНИТЬ

+0

. Моя таблица хранится в MyISAM, а в phpmyadmin она все еще дает мне ошибку: # 1075-Incorrecr table definistion; может быть только один автоматический кулон, и он будет определен как ключ –

+0

(http://dba.stackexchange.com/a/16849) см. это для подробной информации –