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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 13 февраля 2010

AFAIK такой уникальный внутренний идентификатор (скажем, простой идентификатор строки) не существует.

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

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

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

и так далее.

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

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

0 голосов
/ 13 февраля 2010

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

0 голосов
/ 13 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...