为什么必须在表(MySQL中)中指定至少一列作为主键,以便表通过JDBC接受UPDATE和INSERT语句?

为什么必须在表(MySQL中)中指定至少一列作为主键,以便表通过JDBC接受UPDATE和INSERT语句?,mysql,jdbc,primary-key,Mysql,Jdbc,Primary Key,还有,;我可以通过JDBC在表中的主键列中添加负整数吗?除非您使用无符号整数作为其数据类型,否则没有理由不能在主键字段中使用负数 当您没有定义主键(或唯一索引)时,数据库服务器无法知道行是唯一的。当涉及到数据库时,能够区分一行和另一行是非常基本的,我认为MySQL的设计者可能是在强迫你这样做——我不知道,因为我不太使用MySQL。。。老实说,这是我从未遇到过的问题,因为我创建的几乎每个表都有一个PK 为什么必须在表(MySQL中)中指定至少一列作为主键,以便表通过JDBC接受UPDATE和INS

还有,;我可以通过JDBC在表中的主键列中添加负整数吗?

除非您使用无符号整数作为其数据类型,否则没有理由不能在主键字段中使用负数

当您没有定义主键(或唯一索引)时,数据库服务器无法知道行是唯一的。当涉及到数据库时,能够区分一行和另一行是非常基本的,我认为MySQL的设计者可能是在强迫你这样做——我不知道,因为我不太使用MySQL。。。老实说,这是我从未遇到过的问题,因为我创建的几乎每个表都有一个PK

为什么必须在表(MySQL中)中指定至少一列作为主键,以便表通过JDBC接受UPDATE和INSERT语句

这不是JDBC的限制。这是一个数据库限制。有关答案,请参阅DB特定文档

还有,;我可以通过JDBC在表中的主键列中添加负INT吗

这不是JDBC的限制。这是一个数据库限制。有关答案,请参阅DB特定文档


为了让事情更清楚:JDBC在这里只是一个简单的工具,让您能够使用Java语言执行SQL语言。如果您遇到
java.sql
包的异常,那么问题更多地在于所使用的错误sql语法,或者所讨论的数据库中存在限制,或者在极少数情况下数据库提供的JDBC驱动程序中存在缺陷,但它肯定不是像您所想的那样由JDBC API引起的。

请尝试将您的问题限制为每个问题一个问题。您遇到了什么错误?JDBC对主键没有任何要求。@Thilo下面的链接指向我收到的一个例外:@Greg Hewgill当我为许多简单的问题添加更多规定时,我有点内疚。好的,对于可更新的结果集,您需要一个主键(标识要更新的行)@Greg Hewgill:这样我们就可以限制每个答案只能有一个答案(对不起,我无法抗拒);但是,当我尝试在MySQL控制台中使用
INSERT
语句时,它成功地添加了新行,尽管该表没有
主键
列,但是当从JDBC执行相同操作时,它给出了一个例外,即可更新ResultSet需要主键的JDBC限制(或者更确切地说是MySQL JDBC驱动程序限制)。当您通过ResultSet进行更新时,JDBC不仅仅是一个发布SQL的简单工具。@Thilo:因此,这是一个实现细节,它仍然不会成为JDBC API的限制。一周后,我仍然看不出你投反对票有什么价值。你今天过得不好吗?投票被否决的原因是我有点忘了这条线索。我刚才把它还原了。虽然你的答案应该读起来像一个解决方案,而不是——它现在是什么——更像是从一本规则书上读出来。。。但话说回来,我的问题也不是那么描述性的。