Создание и получение индекса одновременно? - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю над программой на C #, которая работает с MariaDB.Поскольку он может выполняться несколькими пользователями одновременно, при вставке (создании) новой строки с помощью оператора INSERT я оставляю индекс (уникальное поле индекса) пустым и позволяю MariaDB назначать их.

Проблема в том, что, поскольку я оставил поле индекса пустым в моей программе, я не знаю, какой номер индекса назначен в БД.Если я попытаюсь создать индекс на стороне клиента, я не смогу гарантировать его уникальность и для БД.

Таким образом, есть ли способ получить индексный номер, назначенный БД, во время создания строки?

PS: я использую sqlcommandbuilder и функцию обновленияsqladapter.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Как насчет использования 2 sql ниже?

SELECT MAX(id) FROM mytable.

или

SELECT LAST_INSERT_ID()

Будет ли другое условие гонки?

0 голосов
/ 15 ноября 2018

Совершенно верно: вы не можете определить первичный ключ в графическом интерфейсе.Это только приведет вас к гоночным условиям.Вам нужно позволить БД сгенерировать его (и любые другие автозначения), а затем вернуть его.

Я не знаю Марии БД, поэтому могу дать только ответы, связанные с SQL: и SELECT TOP, и SCOPE_IDENTITY имеютбыл использован.Однако это не гоночные условия, за исключением всех.Тем не менее, есть SQL OUTPUT предложение .Получение автоматически созданных данных, таких как PK, - вот для чего они нужны.И это даже часть первоначальной транзакции, связанной с оператором DML.

Я не смог найти совпадение с поиском в поиске «предложения MariaDB OUTPUT».Однако я нашел это:

Другие параметры для оператора включают операторы «INSERT ... SET», операторы «INSERT ... SELECT» и некоторые другие параметры.

Синтаксис "insert select" может быть наиболее близким эквивалентом комбинации SQL INSERT ... OUTPUT.Could.

Редактировать: Ну, INSERT SELECT в MariaDB, похоже, не тот дроид, которого вы ищете: https://mariadb.com/kb/en/library/insert-select/ Это больше похоже на массовую вставку / вставку из другой таблицы / импорт

Так что я думаю, что запасной вариант - создать собственную комбинацию вставки / выбора, которая является частью созданной вручную транзакции и блокирует таблицу.

...