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您需要定义行的唯一性并将其定义为唯一(您还可以设置多列)
设置后,“忽略/替换”将起作用。您需要定义行的唯一性并将其定义为唯一(您也可以设置多列)
设置后,“忽略/替换”将起作用。只需在相关列上形成一个唯一键,就可以在相关列上形成一个唯一键