WedX - журнал о программировании и компьютерных науках

Вставка значения в поле первичного ключа в Access

У меня есть несколько таблиц, в которых мне нужно содержать значение «Null», так что, если другая таблица ссылается на эту конкретную запись, она в основном получает «Ничего». Все эти таблицы имеют разное количество записей - если я что-то вставлю в конец, будет сложно найти "нулевую" запись. Поэтому я хотел бы выполнить запрос INSERT, чтобы добавить запись, которая либо имеет значение 0 для поля идентификатора, либо фиксированное число, например 9999999. Я пробовал оба варианта, и Access не позволяет мне выполнить запрос из-за ключевое нарушение.

Дело в том, что я запускал тот же запрос раньше, и он работал нормально. Но потом мне пришлось удалить все данные и загрузить их заново, и теперь, когда я снова пытаюсь это сделать, это не работает. Вот запрос:

INSERT INTO [Reading] ([ReadingID], [EntryFK], [Reading], [NotTrueReading]) 
VALUES (9999999, 0, "", FALSE)

Где 9999999, я также пробовал 0. Оба запроса терпят неудачу из-за ключевых нарушений.

Я знаю, что это не очень хороший дизайн БД. Тем не менее, есть ли способ заставить это работать? Я не уверен, почему я не могу сделать это сейчас, тогда как я мог сделать это раньше.


  • Каков тип данных поля ReadingID? 13.12.2019
  • Попробуйте с: VALUES (9999999, 0, Null, FALSE). 13.12.2019
  • @LeeMac Это автонумерация 13.12.2019
  • @Gustav Густав, я пробовал, похоже, та же ошибка. 13.12.2019

Ответы:


1

Я не уверен, что полностью понимаю проблему здесь, но может быть несколько причин, по которым это не работает. Самое главное, что любой столбец первичного ключа должен быть уникальным для каждой записи в вашей таблице поиска. Как вы упомянули выше, 0 - довольно распространенное значение для «неизвестно», поэтому я думаю, что вы на правильном пути.

0 или 9999999 уже существуют в [Reading]? Если да, то это может быть одним из объяснений. Когда вы стирали таблицу ранее, вы полностью удаляли и воссоздавали таблицу или просто обрезали ее? В зависимости от того, как была настроена таблица, некоторые базы данных будут «запоминать» все ключи, которые они использовали в прошлом, если вы просто удалили все данные в этой таблице и повторно вставили их, а не удалили и воссоздали их (то есть, если бы у меня было 100 записей в таблице, а затем я обрезал ее (или удалил эти записи), в следующий раз, когда я вставлю запись в эту таблицу, она все равно будет начинаться со 101 в качестве значения PK по умолчанию).

Одна вещь, которую вы можете сделать, это удалить и воссоздать таблицу и настроить ее так, чтобы первичный ключ генерировался самой базой данных, если он еще не создан (также известный как столбец типа «идентификация»), и убедитесь, что он начинается с 0 , Как только вы это сделаете, первая запись, которую вы захотите вставить, — это ваше «неизвестное» значение (0), например, когда вы позволяете самой базе данных обрабатывать то, каким будет ReadingID:

INSERT INTO [Reading] ([EntryFK], [Reading], [NotTrueReading]) VALUES (0, "", FALSE)

Затем введите остальные данные. Если другая таблица, ищущая [Reading], имеет нулевое значение в столбце FK, вы всегда можете вернуться к [Reading] при объединении (fk_ReadingID,0) = Reading.ReadingID.

Надеюсь, что это поможет в некоторой степени.

13.12.2019
  • На самом деле я не удалял таблицу напрямую, я удалил данные из другой таблицы с установленными флажками Referential Integrity и Cascade Delete, так что все связанные записи исчезли. Я только что выполнил запрос SELECT, чтобы узнать, существует ли запись «0», которую я вставил ранее, но это не так. Поэтому мне, вероятно, придется скопировать данные в новую таблицу, чтобы она заработала. 13.12.2019
  • Итак, я попытался вставить новое значение вручную, и оказалось, что запрос на вставку действительно работал — он просто не отображался. Следующее значение PK оказалось равным 10000000 после 9999999. Значит, моя проблема вроде как решена? 13.12.2019
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]