Почему необходимо назначить хотя бы один столбец в таблице (в MySQL) в качестве PRIMARY KEY, чтобы таблица могла принимать операторы UPDATE и INSERT через JDBC?

Также; могу ли я добавить отрицательный INT внутри столбца PRIMARY KEY внутри таблицы через JDBC?


person Catfish    schedule 18.12.2009    source источник
comment
Пожалуйста, постарайтесь ограничить свои вопросы одним вопросом на вопрос.   -  person Greg Hewgill    schedule 18.12.2009
comment
Какую ошибку вы получаете? JDBC не требует первичных ключей.   -  person Thilo    schedule 18.12.2009
comment
@Thilo Следующая ссылка относится к полученному мной исключению: stackoverflow.com/questions/1908646/ @Greg Hewgill Я чувствую себя виноватым, когда добавляю больше возможностей для нескольких простых вопросов.   -  person Catfish    schedule 18.12.2009
comment
Хорошо, для обновляемого набора результатов вам нужен первичный ключ (чтобы определить строку, которую нужно обновить).   -  person Thilo    schedule 18.12.2009
comment
@ Грег Хьюгилл: Чтобы мы могли ограничить наши ответы одним ответом на ответ (извините, я не мог устоять).   -  person Konamiman    schedule 18.12.2009


Ответы (2)


Не должно быть никаких причин, по которым вы не можете иметь отрицательное число в поле первичного ключа, если только вы не используете беззнаковое целое число в качестве его типа данных.

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

person Dave Markle    schedule 18.12.2009

Почему необходимо назначать хотя бы один столбец в таблице (в MySQL) в качестве PRIMARY KEY, чтобы таблица могла принимать операторы UPDATE и INSERT через JDBC?

Это не ограничение JDBC. Это ограничение базы данных. Обратитесь к документам, относящимся к БД, для получения ответов.

Также; можно ли добавить отрицательный INT в столбец PRIMARY KEY внутри таблицы через JDBC?

Это не ограничение JDBC. Это ограничение базы данных. Обратитесь к документам, относящимся к БД, для получения ответов.

Для ясности: здесь JDBC — это всего лишь простой инструмент, дающий вам возможность выполнять язык SQL с помощью языка Java. Если вы получаете исключения пакета java.sql, то проблема больше заключается в неправильном используемом синтаксисе SQL, или в ограничении рассматриваемой базы данных, или, в редких случаях, в ошибке в драйвере JDBC, предоставленном БД, но это, конечно, не вызвано по JDBC API в целом, как вы думаете.

person BalusC    schedule 18.12.2009
comment
Я абсолютно точно знаю, что JDBC похож на переводчик; но когда я попытался использовать оператор INSERT в консоли MySQL, он успешно добавил новую строку, несмотря на то, что в таблице нет столбца PRIMARY KEY, но при выполнении того же самого из JDBC он выдал исключение - person Catfish; 18.12.2009
comment
Это ограничение JDBC (или, скорее, ограничение драйвера MySQL JDBC), заключающееся в том, что для UpdatableResultSet требуется первичный ключ. Когда вы обновляете через ResultSet, JDBC — это больше, чем просто инструмент для выдачи SQL. - person Thilo; 23.12.2009
comment
@Thilo: Таким образом, это деталь реализации, которая все еще не делает ее ограничением JDBC API. Я все еще не вижу никакой ценности в вашем отрицательном голосовании через неделю. Был плохой день? - person BalusC; 16.02.2010
comment
причина отрицательного голосования в том, что я как бы забыл об этой теме. Только сейчас вернул. Хотя ваш ответ должен был читаться как решение, а не как то, что он есть в настоящее время, больше похоже на чтение из книги правил ... но опять же, мой вопрос также не был таким описательным. - person Catfish; 22.02.2010