防止在MySql中插入匹配的行

时间:2015-10-15 08:47:20

标签: php mysql

我在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

3 个答案:

答案 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关键字会丢弃插入而不会产生错误。

SQLfiddle

答案 2 :(得分:0)

最简单的方法是让您的列独一无二。在不需要的插入上,你的MySQL驱动程序应该抛出一个异常,你可以处理它。

从域逻辑的角度来看,这是一种不好的做法,因为异常永远不应该处理预期的行为。顺便说一句,您的数据库表可以使用主键。

因此,要获得更好的解决方案,您的方法可能是: - 定义一个独特的领域(SKU似乎合适);考虑将此作为主键使用 - 使用MySQL,使用REPLACE语句:

<enrich>
    <source clone="true" xpath="$body//jsonObject//ResponseJSON"/>
    <target type="body"/>
</enrich>

REPLACE执行INSERT尝试INSERT,并在PK存在的情况下执行UPDATE。