MySQL - 更新查询



MySQL UPDATE 语句

MySQL 的UPDATE 查询用于修改表中现有记录。此语句是 SQL 中数据操纵语言的一部分,因为它只修改表中存在的数据,而不会影响表的结构。

由于它只与表的数据交互,因此需要谨慎使用 UPDATE 语句。如果事先没有选择要修改的行,则表中的所有行都将受到影响,正确的表数据将丢失或需要重新插入。

因此,为了过滤需要修改的记录,MySQL 始终提供 WHERE 子句。使用 WHERE 子句,您可以更新单行或多行。

UPDATE 语句在修改表中的每一行时都会使用锁定,并且一旦修改了该行,就会释放锁定。因此,它可以使用单个查询来更改单行或多行。

语法

以下是用于修改 MySQL 表中数据的 UPDATE 命令的 SQL 语法:

UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
  • 您可以同时更新一个或多个字段。
  • 您可以使用 WHERE 子句指定任何条件。
  • 您可以一次更新单个表中的值。

当您想要更新表中选定的行时,WHERE 子句非常有用。

从命令提示符更新数据

这将使用带有 WHERE 子句的 SQL UPDATE 命令来更新 MySQL 表中的选定数据。

示例

首先,让我们使用以下 CREATE 查询创建一个名为CUSTOMERS的表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查询将 7 条记录插入到上面创建的表中:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

执行以下查询以检索 CUSTOMERS 表中存在的所有记录:

Select * from CUSTOMERS;

以下是 CUSTOMERS 表:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Komal 22 海得拉巴 4500.00
7 Muffy 24 因多尔 10000.00

在这里,我们使用 SQL UPDATE 查询来更新 CUSTOMERS 表中的 NAME 字段。它将 ID 等于 6 的行的名称设置为“Nikhilesh”。

UPDATE CUSTOMERS 
SET NAME = 'Nikhilesh' 
WHERE ID = 6;

输出

上述查询已成功执行,没有任何错误。

Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

验证

要验证名称是否已替换为“Nikhilesh”,请使用以下查询:

Select * from CUSTOMERS;

正如我们从输出中看到的,ID 为 6 的 NAME 已更新:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Nikhilesh 22 海得拉巴 4500.00
7 Muffy 24 因多尔 10000.00

从命令提示符更新多条记录

使用 UPDATE 语句,还可以更新 MySQL 表中的多行和多列。要更新多行,请在 WHERE 子句中指定条件,以便只有所需的行列满足该条件。因此,只更新这些记录中的值。

示例

现在,让我们使用以下查询更新先前创建的CUSTOMERS表中的多条记录:

UPDATE CUSTOMERS
SET ADDRESS = 'Vishakapatnam'
WHERE ID = 6 OR ID = 3;

输出

上述查询已成功执行,没有任何错误。

Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

验证

要验证 ID = 6 和 3 的 ADDRESS 是否已替换为“Vishakapatnam”,请使用以下查询:

Select * from CUSTOMERS;

正如我们从输出中看到的,ID 为 6 的 NAME 已更新:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 Vishakapatnam 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Nikhilesh 22 Vishakapatnam 4500.00
7 Muffy 24 因多尔 10000.00

使用客户端程序更新表

除了使用 MySQL 查询更新表中的记录外,我们还可以使用客户端程序对表执行 UPDATE 操作。

语法

以下是各种编程语言中此操作的语法:

要通过 PHP 程序更新 MySQL 数据库中表的记录,我们需要使用mysqli 函数query()执行UPDATE语句,如下所示:

$sql="UPDATE table_name SET field1 = new-value1,
   field2 = new-value2 [WHERE Clause]";
$mysqli->query($sql);

要通过 Node.js 程序更新 MySQL 数据库中表的记录,我们需要使用mysql2库的query()函数执行UPDATE语句,如下所示:

sql = "UPDATE table_name SET column1 = value1,
   column2 = value2, ... WHERE condition";
con.query(sql);

要通过 Java 程序更新 MySQL 数据库中表的记录,我们需要使用JDBC函数executeUpdate()执行UPDATE语句,如下所示:

String sql="UPDATE table_name SET field1 = new-value1,
   field2 = new-value2 [WHERE Clause]";
statement.executeUpdate(sql);

要通过 Python 程序更新 MySQL 数据库中表的记录,我们需要使用 MySQL Connector/Pythonexecute()函数执行UPDATE语句,如下所示:

update_query = "UPDATE table_name SET field1 = new-value1,
   field2 = new-value2 [WHERE Clause]"
cursorObj.execute(update_query);

示例

以下是程序:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root@123';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if($mysqli->connect_errno ) {
   printf("Connect failed: %s<br />", $mysqli->connect_error);
   exit();
}
printf('Connected successfully.<br />');

if ($mysqli->query('UPDATE tutorials_tbl set tutorial_title = "Learning Java" where tutorial_id = 4')) {
   printf("Table tutorials_tbl updated successfully.<br />");
}
if ($mysqli->errno) {
   printf("Could not update table: %s<br />", $mysqli->error);
}

$sql = "SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl";

$result = $mysqli->query($sql);
  
if ($result->num_rows > 0) {
   while($row = $result->fetch_assoc()) {
      printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
         $row["tutorial_id"], 
         $row["tutorial_title"], 
         $row["tutorial_author"],
         $row["submission_date"]);               
   }
} else {
   printf('No record found.<br />');
}
mysqli_free_result($result);
$mysqli->close();

输出

获得的输出如下:

Connected successfully.
Table tutorials_tbl updated successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021
Id: 4, Title: Learning Java, Author: Mahesh, Date: 2021
Id: 5, Title: Apache Tutorial, Author: Suresh, Date: 2021
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
  });

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");

  //Selecting a Database
  sql = "USE TUTORIALS"
  con.query(sql);

  //Updating a single record in the table
  sql = "UPDATE tutorials_tbl SET tutorial_title = 'Learning Java' WHERE tutorial_id = 3;"
  con.query(sql);

  //Selecting records from table
  sql = "SELECT * FROM tutorials_tbl"
  con.query(sql, function (err, result) {
      if (err) throw err;
      console.log(result);
  });
});

输出

产生的输出如下:

Connected!
[
  {
    tutorial_id: 1,
    tutorial_title: 'Learn PHP',
    tutorial_author: 'John Paul',
    submission_date: 2023-07-25T18:30:00.000Z
  },
  {
    tutorial_id: 2,
    tutorial_title: 'Learn MySQL',
    tutorial_author: 'Abdul S',
    submission_date: 2023-07-25T18:30:00.000Z
  },
  {
    tutorial_id: 3,
    tutorial_title: 'Learning Java',
    tutorial_author: 'Sanjay',
    submission_date: 2007-05-05T18:30:00.000Z
  },
  {
    tutorial_id: 4,
    tutorial_title: 'Python Tutorial',
    tutorial_author: 'Sasha Lee',
    submission_date: 2016-09-03T18:30:00.000Z
  },
  {
    tutorial_id: 5,
    tutorial_title: 'Hadoop Tutorial',
    tutorial_author: 'Chris Welsh',
    submission_date: 2023-07-25T18:30:00.000Z
  }
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class UpdateQuery {
	public static void main(String[] args) {
		String url = "jdbc:mysql://127.0.0.1:3306/TUTORIALS";
		String user = "root";
		String password = "password";
		ResultSet rs;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            //System.out.println("Database connected successfully...!");
            String sql = "UPDATE tutorials_tbl SET tutorial_title = 'Learning Java' WHERE tutorial_id = 3";
            st.executeUpdate(sql);
            System.out.println("Update query executed successfully..!");
            String sql1 = "SELECT * FROM tutorials_tbl";
            rs = st.executeQuery(sql1);
            System.out.println("Table records: ");
            while(rs.next()) {
            	String tutorial_id = rs.getString("tutorial_id");
            	String tutorial_title = rs.getString("tutorial_title");
            	String tutorial_author = rs.getString("tutorial_author");
            	String submission_date = rs.getString("submission_date");
            	System.out.println("Id: " + tutorial_id + ", Title: " + tutorial_title + ", Author: " +  tutorial_author + ", Submission_date: " + submission_date);
            }
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

输出

获得的输出如下所示:

Update query executed successfully..!
Table records: 
Id: 1, Title: Learn PHP, Author: John Paul, Submission_date: 2023-08-08
Id: 2, Title: Angular Java, Author: Abdul S, Submission_date: 2023-08-08
Id: 3, Title: Learning Java, Author: Sanjay, Submission_date: 2007-05-06
Id: 4, Title: Python Tutorial, Author: Sasha Lee, Submission_date: 2016-09-04
Id: 5, Title: Hadoop Tutorial, Author: Chris Welsh, Submission_date: 2023-08-08
import mysql.connector
import datetime
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
#Creating a cursor object 
cursorObj = connection.cursor()
update_query = "UPDATE tutorials_tbl SET tutorial_title = 'Learning Java' WHERE tutorial_id = 3"
cursorObj.execute(update_query)
connection.commit()
print("Row updated successfully.")
cursorObj.close()
connection.close()

输出

以下是上述代码的输出:

Row updated successfully.
广告