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