【问题标题】:How to update a specific row in a table without a primary key in MySQL?如何在 MySQL 中没有主键的情况下更新表中的特定行?
【发布时间】:2016-07-04 09:53:26
【问题描述】:

我正在尝试在 MySQL 数据库表中使用 UPDATE 查询。我有在表中自动递增的主键,但我不想在执行此查询时使用此键。这是因为该列在删除记录时不会重新开始计数,因此表中存在间隙。例如,如果我删除第 25 行,然后插入新行,则该行的 ID/将为 26。所以回到我的问题,我想知道如何编辑一个特定记录/行的值。我尝试了以下方法:

UPDATE `table_name` SET `first_Name` = "Robert" WHERE (SELECT * FROM `employees` LIMIT 1,1)

这是我仅在第二行更新 firs_Name 的尝试。但它不起作用。有一些语法错误。有没有其他方法可以做到这一点?或者我可以解决自动递增列的问题(我更喜欢忽略这个的答案)。

提前致谢!

【问题讨论】:

  • 更新一行的时候不知道它的id吗??
  • 当前三个人被称为罗伯特并且你想改变第二个时,你的代码会发生什么?当你知道你必须改变什么记录时,你就有了它的主 ID。以这种方式使用它。
  • @jiboulex 我确实知道 ID 是什么,但我不想在查询中使用它,因为 MySQL 中的自动增量不是很好(在我看来)
  • 为了进行任何更新,您必须使用 uniq 值。名称不是唯一的。如果您想编辑现有用户,请使用他的 ID。或者给我们更多信息,你的脚本最后应该做什么。
  • 你为什么不使用 id ?这是有原因的!当您删除行时自动增量会产生间隙还有一个原因:您不希望资源替换另一个资源!你对mysql自动增量的看法是错误的!

标签: php mysql sql-update row primary-key


【解决方案1】:

您的用户表如下所示:

id    |   first_name
1     |   Robert
2     |   Sam

现在您要编辑 SAM,因此他被称为 Samuel。

#1

打印用户

Select * From Users

然后构建一个循环以将用户返回到表中。然后你就可以用它来做你的动作了。

#2

<?php

if(isset($_GET['userid']))
{
    if(isset($_POST['update']))
    {
        mysql_query("UPDATE Users SET first_name = '".$_POST['first_name']."' where id=".$_GET['userid']." LIMIT 1");
    }
    else
    {
        $get_user_sql = "SELECT * FROM Users WHERE id = ".$_GET['userid']." LIMIT 1";
        $query_user = mysql_query($get_user_sql);
        $user = mysql_fetch_assoc($query_user);
        print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
        print '<input type="text" name="first_name" id="first_name" value="'.$user['first_name'].'" />';
        print '<input type="submit" />';
    }
}
else
{
    $sql = "SELECT * FROM Users";
    $query = mysql_query($sql);
    while($row = mysql_fetch_assoc($query))
    {
        print '<a href="?userid='.$row['id'].'">edit user <b>'.$row['first_name'].'</b></a><br />';
    }
}

?>

【讨论】:

  • 顺便说一句,你应该使用 mysqli 而不是 mysql,你应该使用 '.$_XYZ.''$_XYZ' 清理代码,具体取决于你的 php 版本和良好做法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多