Как пропустить первичный ключ в команде sqlSave ()? - PullRequest
4 голосов
/ 15 июня 2011

Я пытаюсь вставить data.frame в базу данных MySQL, используя RODBC.Я использую следующую команду:

sqlSave(channel,dbData,tablename='table_name', append=TRUE,safer=TRUE,fast=FALSE,verbose=TRUE)

Теперь у таблицы, в которую я пытаюсь вставить данные, есть первичный ключ с автоматическим приращением.В моей таблице всего 7 столбцов, включая первичный ключ.В моем фрейме данных у меня есть 6 столбцов, потому что я не хочу вставлять PK самостоятельно.Однако, когда я запускаю команду, я получаю следующую ошибку:

23000 1062 [MySQL][ODBC 5.1 Driver][mysqld-5.5.13]Duplicate entry '1' for key 'PRIMARY'

Из вышеприведенной ошибки я понимаю, что она пытается вставить '1' в качестве первичного ключа, когда уже есть запись с 1как его ПК.Любая идея, как я могу избежать этого с помощью sqlSave ()?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Вы можете попробовать добавить седьмой столбец в свой фрейм данных и присвоить значение NULL или 0 для данных столбца PK.Тогда MySQL автоматически сгенерирует для него значение.

0 голосов
/ 15 июня 2011

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

...