我正在运行一个插入语句来插入数据,但我想根据日期检查任何重复的条目,然后执行一个条目。
我想要的只是如果今天用户输入product_name='x'
,'x' 是唯一的,因此今天没有人可以x
再次输入产品名称。但当然第二天他们可以。
我不想在插入之前运行选择来进行检查。有替代方案吗?
您可以使用
1. Insert into... on duplicate update
2. insert.. ignore
这篇文章将回答你的问题
您可以使用 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 字段上添加约束。
最后,请务必将此类信息添加到您的问题中,这样可以节省大家一点时间:)