Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止在MySql中插入匹配行_Php_Mysql - Fatal编程技术网

Php 防止在MySql中插入匹配行

Php 防止在MySql中插入匹配行,php,mysql,Php,Mysql,我在MySql数据库中有一个表。我想防止在MySql中插入匹配的行。就像我在一个表中有4列一样。我不想插入任何具有这4列匹配值的行。我试图在下面说明这一点 My table ---------- product_name| product_sku |product_quantity| product_price ---------- Computer | comp_007 | 5 | 500 我想防止再次插入同一行。我如何使用MySql查询做到这一点

我在MySql数据库中有一个表。我想防止在MySql中插入匹配的行。就像我在一个表中有4列一样。我不想插入任何具有这4列匹配值的行。我试图在下面说明这一点

My table
----------
 product_name| product_sku |product_quantity| product_price
----------
 Computer    | comp_007    | 5              | 500
我想防止再次插入同一行。我如何使用MySql查询做到这一点

更新

我不想再插入


但我想在下面插入行







在相关列上创建组合的唯一键/复合键:

ALTER TABLE `table` ADD UNIQUE (
`product_name` ,
`product_sku` ,
`product_quantity`,
`product_price`
);

任何插入重复行的尝试都将导致MySQL错误。

在相关列上创建组合的唯一键/复合键:

ALTER TABLE `table` ADD UNIQUE (
`product_name` ,
`product_sku` ,
`product_quantity`,
`product_price`
);

任何插入重复行的尝试都将导致MySQL错误。

如果可能,您应该在列中添加一个唯一键:

ALTER TABLE `table_name` 
ADD UNIQUE INDEX `ix_name` (`product_name`, `product_sku`, `product_quantity`, `product_price`);
然后使用插入忽略:

INSERT IGNORE INTO table_name (product_name, product_sku, product_quantity, product_price) VALUES (value1, value2, value3, value4);
如果记录是唯一的
MYSQL
像往常一样插入它,如果记录是重复的,那么
IGNORE
关键字将放弃插入而不产生错误


如果可能,您应该在列中添加一个唯一键:

ALTER TABLE `table_name` 
ADD UNIQUE INDEX `ix_name` (`product_name`, `product_sku`, `product_quantity`, `product_price`);
然后使用插入忽略:

INSERT IGNORE INTO table_name (product_name, product_sku, product_quantity, product_price) VALUES (value1, value2, value3, value4);
如果记录是唯一的
MYSQL
像往常一样插入它,如果记录是重复的,那么
IGNORE
关键字将放弃插入而不产生错误


最简单的方法是使您的列具有唯一性。对于不需要的插入,您的MySQL驱动程序应该抛出一个异常,您可以处理该异常

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

因此,要获得更好的解决方案,您的方法可以是: -定义唯一字段(SKU似乎合适);考虑将其用作主键 -对于MySQL,使用REPLACE语句:

REPLACE INTO your_tablename
SET product_name='the name'
-- and so on for other columns
WHERE product_sku = 'whatever_sku';

REPLACE的任务是尝试插入,如果PK存在,则执行更新。

最简单的方法是使列唯一。对于不需要的插入,您的MySQL驱动程序应该抛出一个异常,您可以处理该异常

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

因此,要获得更好的解决方案,您的方法可以是: -定义唯一字段(SKU似乎合适);考虑将其用作主键 -对于MySQL,使用REPLACE语句:

REPLACE INTO your_tablename
SET product_name='the name'
-- and so on for other columns
WHERE product_sku = 'whatever_sku';

REPLACE的任务是尝试插入,如果PK存在,则执行更新。

您是否了解我的问题???@abuab您是否尝试了我的解决方案?这将起作用,你也可以查看我在答案中发布的SQLFiddle链接。你收到我的问题了吗???@Abuau你尝试过我的解决方案了吗?这将起作用,您也可以检查我在答案中发布的SQLFiddle链接。
INSERT IGNORE INTO table_name (product_name, product_sku, product_quantity, product_price) VALUES (value1, value2, value3, value4);
REPLACE INTO your_tablename
SET product_name='the name'
-- and so on for other columns
WHERE product_sku = 'whatever_sku';