2016-08-31 3 views
1

У меня есть таблица содержит три столбца (ID, магазин & User).Как создать столбец с другим столбцом?

ID & магазин являются составными первичными ключами

Я хочу, чтобы генерировать идентификационный номер в соответствии с магазином.

Например, № 1 пользователь для лавки № 2 пользователя для магазина A No. 1 пользователя для магазина B

Как сгенерировать этот идентификационный номер в соответствии с магазином.

NumberID ID INT идентичность, Магазин VARCHAR (100), пользователь VARCHAR (100)

+0

T-SQL является специфическим для Sybase/MsSQL. Я вижу, что вы отметили свой вопрос как MySQL. Какую базу данных вы используете? – blackpen

+0

Жаль, что я хочу попробовать с MSSQL и MYSQL – gayan1991

+0

Хотите ли вы «одно решение» работать в обоих типах баз данных? Синтаксис MsSQL может отличаться от синтаксиса MySQL. – blackpen

ответ

1

Делая это в "создать заявление/с" самой таблицы базы данных типа специфичны. Он также требует специфического опыта работы с БД (для работы с такими сложными вещами, как счетчик запуска, значение автоматического прироста, прыжки в стоимости во время параллельных транзакций для повышения эффективности, уход за счетчиком при резервном копировании/восстановлении, сложность выполнения для части первичного ключа). Может быть, некоторые эксперты по базам данных ответят на это пуленепробивным способом.

В то же время, вот как вы могли бы сделать это в MySQL в самой инструкции «insert» (путем ее атомарного запуска). Это также может работать в триггере/процедуре (в зависимости от ваших обстоятельств о том, как вы хотите защитить разработчиков от случайного ввода дубликатов). Если вы сделаете это в процедуре, вы можете предоставить процедуру в качестве основного интерфейса для разработчиков (и получить доступ для них от вставки непосредственно в таблицу).

MySQL 5.6 Схема/Вставки:

create table tt 
(
    id int, shop varchar(100), user varchar(100) 
); 


insert into tt values (
    ifnull((select max(id) from tt a where a.shop='shop1'),0)+1, 
    'shop1', 
    'user1' 
); 

insert into tt values (
    ifnull((select max(id) from tt a where a.shop='shop1'),0)+1, 
    'shop1', 
    'user1' 
); 

Запрос:

select * from tt 

[Результаты]:

| id | shop | user | 
|----|-------|-------| 
| 1 | shop1 | user1 | 
| 2 | shop1 | user1 | 
Смежные вопросы