MySQL: Есть ли что -то вроде внутреннего идентификатора записи для каждой записи в таблице MySQL?

StackOverflow https://stackoverflow.com/questions/2258052

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Есть ли способ, такой как какой -то «внутренний идентификатор записей» (внутренний, как в использовании самим двигателем базы данных), для однозначного идентификации записей, чтобы я смогу обновить правильный?

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

ВАЖНО: Приложение для электронной таблицы направлено на работу над любой таблицей, даже с чрезвычайно плохо спроектированными, без каких -либо ключей, поэтому такие решения, как «Определить поле с уникальным индексом и работа с этим», не являются вариантом, структура таблицы может быть чрезвычайно переменной и не должен иметь значения.

Большое спасибо.

Это было полезно?

Решение

Afaik Нет такого уникального внутреннего идентификатора (скажем, простой идентификатор строки).

Ты май может быть иметь возможность запустить SELECT Без какой-либо сортировки, а затем получить n-й ряд, используя LIMIT. Анкет При каких условиях, которые являются надежными и безопасными в использовании, Guru MySQL должен был бы подтвердить. Это, вероятно, никогда не бывает.

Попробуйте поиграть с phpmyadmin, веб -фронт в MySQL. Он предназначен для того, чтобы справиться с плохо разработанными таблицами без ключей. Если я правильно помню, он использует все столбцы, которые он может получить в таких случаях:

UPDATE xyz set a = b WHERE 'fieldname'  = 'value' 
                       AND 'fieldname2' = 'value2' 
                       AND 'fieldname3' = 'value3' 
                       LIMIT 0,1;

и так далее.

Конечно, это тоже не совсем дубликат.

Единственная идея, которая приходит мне в голову, - добавить ключевой столбец во время выполнения и удалить его, когда ваше приложение будет сделано. Это идея, вызывающая гусь, но, возможно, лучше, чем ничего.

Другие советы

MySQL имеет числовые столбцы «автоматического интеграмента», которые вы можете добавить и даже определить как первичный ключ, который даст вам уникальный идентификатор записи, автоматически сгенерированный базой данных. Вы можете запросить последний идентификатор записи, который вы только что вставили select LAST_INSERT_ID()

Пример из официальной документации MySQL здесь

Насколько мне известно, MySQL не хватает неявной функции Rowid, как видно в Oracle (и существует в других двигателях со своим собственным синтаксисом). Вам придется создать свой собственный AUTO_INCREMENT поле.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top