MYSQL:问题为同一条目插入多行

时间:2018-02-25 17:26:23

标签: mysql sql mysqli sql-insert

即使使用了select查询,我仍然会使用相同的名称插入多行。

以下是我遇到上述问题的类似代码示例。

$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);
}

2 个答案:

答案 0 :(得分:0)

在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);

请注意,我还用参数占位符替换了变量。使用参数是将值传递给查询的正确方法。

这种方法的优点是什么?

  • 它简化了应用程序编码。
  • 数据库强制执行唯一约束,因此它是多线程安全的。
  • 无论字段如何插入或更新,name的唯一性都得到保证。

答案 1 :(得分:-1)

更新代码中的以下行:

<div id="vue-app">
    <!-- ...... -->
    <% for (var i = 0; i < data.length; i++) { %>
    <li><%= data[i].id %></li>
    <send-bv></send-bv>
    <% } %>
    <!-- ...... -->
</div>

使用

$query = "SELECT * FROM table WHERE name = 'variable name' ";

希望这有帮助