我有一个带有唯一编号和徽章编号的数据库。徽章编号会改变,但唯一的编号不会。
|unique_number|badge_number|
|-------------|------------|
|1234 |2 |
|-------------|------------|
我希望能够在不创建新行的情况下更新与badge_number
相关的unique_number
(取消选中“唯一”键)。但目前我收到错误Error: Duplicate entry '1234' for key 'unique_number'
如果我发布此代码:
$sql="INSERT INTO table (unique_number, badge_number) VALUES ('1234', 1)";
$sql="INSERT INTO push (unique_number) VALUES ('".$_POST['unique_number']."')";
$sql2="UPDATE table set badge_number= 0 where unique_number=".$_POST['unique_number']."";
if (!mysqli_query($con,$sql))
{
echo'Error: ' . mysqli_error($con);
}
if (!mysqli_query($con,$sql2))
{
die('Error2: ' . mysqli_error($con));
}
答案 0 :(得分:2)
如果您将主键或唯一约束应用于列,则任何新数据的插入都必须根据该列验证数据的唯一性。所以我猜你有一个约束应用于unique_number
列。
但是,当且仅当新数据验证现有数据时,您仍然会更改示例行的数据。
UPDATE table SET badge_number = 1 WHERE unique_number = '1234'
答案 1 :(得分:2)
INSERT查询负责在表中插入新记录。 因此,如果您尝试插入unique_number = 1234的新行,则会违反唯一键约束并生成错误错误:重复条目' 1234'对于key' unique_number'因为已经记录了这个unique_number = 1234。
如果要更新现有记录,可以使用更新查询来更新任何记录。 因此,如果您需要更新unique_number = 1234的记录,则需要使用以下查询:
UPDATE table_name SET badge_number = 3 WHERE unique_number = 1234
答案 2 :(得分:2)
如下所示?
$sql = "UPDATE table SET badge_number = '0' WHERE unique_number = '$_POST['unique_number']'";