Делая это в "создать заявление/с" самой таблицы базы данных типа специфичны. Он также требует специфического опыта работы с БД (для работы с такими сложными вещами, как счетчик запуска, значение автоматического прироста, прыжки в стоимости во время параллельных транзакций для повышения эффективности, уход за счетчиком при резервном копировании/восстановлении, сложность выполнения для части первичного ключа). Может быть, некоторые эксперты по базам данных ответят на это пуленепробивным способом.
В то же время, вот как вы могли бы сделать это в 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 |
T-SQL является специфическим для Sybase/MsSQL. Я вижу, что вы отметили свой вопрос как MySQL. Какую базу данных вы используете? – blackpen
Жаль, что я хочу попробовать с MSSQL и MYSQL – gayan1991
Хотите ли вы «одно решение» работать в обоих типах баз данных? Синтаксис MsSQL может отличаться от синтаксиса MySQL. – blackpen