0

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

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

我不想在插入之前运行选择来进行检查。有替代方案吗?

4

2 回答 2

3

您可以使用

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

这篇文章将回答你的问题

“INSERT IGNORE”与“INSERT ... ON DUPLICATE KEY UPDATE”

于 2012-09-26T08:08:16.777 回答
2

您可以使用 mysqlinsert 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 字段上添加约束。

最后,请务必将此类信息添加到您的问题中,这样可以节省大家一点时间:)

于 2012-09-26T08:07:25.153 回答