我在MySql数据库中有一个表。我想阻止在MySql中插入匹配的行。就像我在表中有4列。我不想插入任何具有这4列匹配值的行。我试图在下面显示
My table
----------
product_name| product_sku |product_quantity| product_price
----------
Computer | comp_007 | 5 | 500
我想阻止再次插入相同的行。我怎么能用MySql查询呢?
更新
我不想再次插入
Computer | comp_007 | 5 | 500
但我想插入下面的行
mouse | comp_007 | 5 | 500
Computer | comp_008 | 5 | 500
Computer | comp_007 | 50 | 500
Computer | comp_007 | 5 | 100
mouse | mou_007 | 5 | 500
答案 0 :(得分:3)
在相关列上创建组合的唯一键/复合键:
ALTER TABLE `table` ADD UNIQUE (
`product_name` ,
`product_sku` ,
`product_quantity`,
`product_price`
);
任何插入重复行的尝试都将导致MySQL错误。
答案 1 :(得分:1)
如果可能,您应该在列中添加唯一键:
ALTER TABLE `table_name`
ADD UNIQUE INDEX `ix_name` (`product_name`, `product_sku`, `product_quantity`, `product_price`);
然后使用INSERT IGNORE
:
INSERT IGNORE INTO table_name (product_name, product_sku, product_quantity, product_price) VALUES (value1, value2, value3, value4);
如果记录是唯一的MYSQL
,则照常插入,如果记录重复,则IGNORE
关键字会丢弃插入而不会产生错误。
答案 2 :(得分:0)
最简单的方法是让您的列独一无二。在不需要的插入上,你的MySQL驱动程序应该抛出一个异常,你可以处理它。
从域逻辑的角度来看,这是一种不好的做法,因为异常永远不应该处理预期的行为。顺便说一句,您的数据库表可以使用主键。
因此,要获得更好的解决方案,您的方法可能是: - 定义一个独特的领域(SKU似乎合适);考虑将此作为主键使用 - 使用MySQL,使用REPLACE语句:
<enrich>
<source clone="true" xpath="$body//jsonObject//ResponseJSON"/>
<target type="body"/>
</enrich>
REPLACE执行INSERT尝试INSERT,并在PK存在的情况下执行UPDATE。