MYSQL:为同一条目插入多行
即使在使用selectquery之后,我仍然会得到多个插入了相同名称的行 下面是我面临上述问题的类似代码的示例MYSQL:为同一条目插入多行,mysql,sql,mysqli,sql-insert,Mysql,Sql,Mysqli,Sql Insert,即使在使用selectquery之后,我仍然会得到多个插入了相同名称的行 下面是我面临上述问题的类似代码的示例 $current_timestamp=date('Y-m-d H:i:s'); //current date-time $query = "SELECT * FROM table WHERE name = 'variable name' "; $result=try_mysql_query($link, $query); if(mysqli_num_rows($result))
$current_timestamp=date('Y-m-d H:i:s'); //current date-time
$query = "SELECT * FROM table WHERE name = 'variable name' ";
$result=try_mysql_query($link, $query);
if(mysqli_num_rows($result))
{
$updatequery = "UPDATE account_extension SET
updated_at = '$current_timestamp' WHERE name = 'variable name'";
$result = try_mysql_query($link, $updatequery);
}
else
{
$insertsql="INSERT INTO table(`name`,`updated_at`)
VALUES ('variable name','$current_timestamp')";
$result = try_mysql_query($link,$insertsql);
}
在MySQL中实现这一点的正确方法是使用单个语句 首先,您需要一个唯一的索引:
create unique index ind_ account_extension_name on account_extension(name);
然后,您可以执行以下操作:
insert into account_extension(name, updated_at)
values (?, ?)
on duplicate key update updated_at = values(updated_at);
注意,我还用参数占位符替换了变量。使用参数是将值传递到查询中的正确方法
这种方法的优点是什么
它简化了应用程序编码。
数据库强制执行唯一约束,因此它是多线程安全的。
无论字段如何插入或更新,都保证名称的唯一性。
更新代码中的以下行:
$query = "SELECT * FROM table WHERE name = 'variable name' ";
与
希望这有帮助谢谢你的回答。我完全理解您的方法,但有一件事我需要向您询问,我的方法中是否存在任何错误或错误,导致重复输入?由于此表中有数百万行,因此我没有为此表创建唯一的键索引。因为这会增加执行相同方法的复杂性。@Axar。我不知道你所说的复杂性是什么意思。对我来说,一条SQL语句似乎比三条SQL语句简单得多,其中复杂的是条件逻辑。尽可能让数据库确保数据的完整性。按照您的方法,我们仍然需要执行相同的方法。相同的select查询用于检查是否存在用户条目,并基于执行更新或插入查询的条目。所以我不明白你是怎么说的在一个查询中就这么做的?@Axar。在数据库中创建一次索引/约束。然后执行一次插入。我在数据库中创建了一个唯一的索引。现在我删除了完整的代码,只执行insert查询。获取Mysql错误1062-键“name”的条目“variable name”重复,因此不更新现有条目
$query = "SELECT * FROM table WHERE name like '%variable name%' ";