避免根据日期输入重复条目,而不使用select语句

时间:2012-09-26 08:06:05

标签: php mysql

我正在运行插入语句来插入数据,但我想根据日期检查任何重复的条目,然后进行输入。

我想要的只是今天用户输入product_name='x','x'是唯一的,因此今天没有人可以再次输入产品名称x。但当然第二天他们可以。

我不想在插入之前运行select来进行检查。还有其他选择吗?

2 个答案:

答案 0 :(得分:3)

您可以使用

1. Insert into... on duplicate update
2. insert.. ignore

这篇文章将回答你的问题

"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

答案 1 :(得分:2)

你可以使用mysql insert into... on duplicate update语法,如果没有那个,它基本上会进入一个新行,或者如果新行会引起一个键约束,那么它可以用来改为更新。

假设你有下表:

MyTable
ID | Name
1  | Fluffeh
2  | Bobby
3  | Tables

并且ID被设置为数据库中的主键(意味着它不能有两行具有相同的值),您通常会尝试这样插入:

insert into myTable 
    values (1, 'Fluffster');

但是这会产生一个错误,因为已经存在ID为1的行。

使用insert on duplicate update查询现在看起来像这样:

insert into myTable 
    values (1, 'Fluffster') 
    on duplicate key update Name='Fluffster';

现在,它不是返回错误,而是使用新名称更新行。

编辑:您可以使用以下语法在两列中添加唯一索引:

ALTER TABLE myTable
ADD UNIQUE INDEX (ID, `name`);

现在,您可以使用上面的语法插入行,同时具有与其他行相同的ID,但仅当名称不同时 - 或者在您的情况下,在varchar和date字段上添加约束。

最后,请在开始时将这类信息添加到您的问题中,这样可以节省每个人一些时间:)