Java 当列值相同(日期时间列除外)时插入记录或忽略记录的有效方法

Java 当列值相同(日期时间列除外)时插入记录或忽略记录的有效方法,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个带有日期时间列的表。我希望在插入时避免表中出现重复行。我已尝试插入忽略和替换。但是,由于每次插入的日期时间都不同,因此记录是重复的 如何有效地检查其他值是否相同,然后不插入 我的问题是: 替换为mytable(msisdn、标记化卡号、createddate、scheduletype、payment for)值('11',11',now(),'12',11') 将忽略插入ESB_自动支付(msisdn、令牌化卡号、createddate、scheduletype、payment_for)

我有一个带有日期时间列的表。我希望在插入时避免表中出现重复行。我已尝试插入忽略和替换。但是,由于每次插入的日期时间都不同,因此记录是重复的

如何有效地检查其他值是否相同,然后不插入

我的问题是:

替换为mytable(msisdn、标记化卡号、createddate、scheduletype、payment for)值('11',11',now(),'12',11')

将忽略插入ESB_自动支付(msisdn、令牌化卡号、createddate、scheduletype、payment_for)值('11',11',now(),'12',11')

一种方法是首先选择记录(如果存在),然后不运行插入查询。有没有更好的解决办法


我使用的JDBC在SQL术语中称为
MERGE
UPSERT
(这是“更新或插入”的一个portmanteau)

MySQL不支持它。你会发现mysql不支持很多东西,一开始就不应该使用,它是。。。根本不是一个好的数据库引擎

无论如何,您仍然可以这样做:首先对除
createddate
之外的所有内容创建一个唯一的索引,然后您可以使用
INSERT。。。在重复密钥时更新id=id
)。不要使用忽略;这忽略了所有错误,而不仅仅是主要的关键问题


*)在网上搜索“如何在MySQL中插入”时,使用IGNORE是一个非常常见的建议,但是,MySQL的一个问题是社区似乎对正确的实践非常粗心不要在SQL术语中使用IGNORE

,这称为
合并
上传
(这是“更新或插入”的一个端口)

MySQL不支持它。你会发现mysql不支持很多东西,一开始就不应该使用,它是。。。根本不是一个好的数据库引擎

无论如何,您仍然可以这样做:首先对除
createddate
之外的所有内容创建一个唯一的索引,然后您可以使用
INSERT。。。在重复密钥时更新id=id
)。不要使用忽略;这忽略了所有错误,而不仅仅是主要的关键问题


*)在网上搜索“如何在MySQL中插入”时,使用IGNORE是一个非常常见的建议,但是,MySQL的一个问题是社区似乎对正确的实践非常粗心不要使用IGNORE

您需要定义行的唯一性并将其定义为唯一(您还可以设置多列)


设置后,“忽略/替换”将起作用。

您需要定义行的唯一性并将其定义为唯一(您也可以设置多列)


设置后,“忽略/替换”将起作用。

只需在相关列上形成一个唯一键,就可以在相关列上形成一个唯一键