SQL更新语句– 在SQL中进行更新查询

时间:2020-02-23 14:32:36  来源:igfitidea点击:

SQL中的SQL Update语句或者Update Query用于修改表中的列数据。
之前我们研究了SQL Select和SQL Insert查询。

SQL更新

在数据库中,数据的存储和检索是最重要的方面。
但是,在某些情况下,我们可能错误地插入了一些不正确的数据,或者所插入的数据需要进行一些修改。

修改数据库中现有的数据是面向性能的任务。
如果需要更新的记录数量巨大,则对性能的影响将会很大。
SQL UPDATE语句用于修改现有记录。

SQL更新查询语法

更新所选记录:

UPDATE table_name SET column1 = value 1, column2 = value 2,.. column_n = value_n
WHERE condition;

在以上语法中,更新是根据WHERE子句中指定的条件进行的。
让我们尝试通过一些示例来了解sql更新查询。

假设我们有一个包含一些数据的Customer表,位于SQL查询下方,用于创建表并填充一些数据。
我使用的是MySQL数据库,对于下面的其他数据库供应商的查询将略有不同。

CREATE TABLE `Employee` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL DEFAULT '',
`age` int(2) DEFAULT NULL,
`gender` varchar(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `Employee` (`id`, `name`, `age`, `gender`)
VALUES
	(1, 'John', 30, 'M'),
	(2, 'Smith', 25, 'F'),
	(3, 'Henry', 20, 'M'),
	(4, 'Lisa', 32, 'M');
commit;

现在请注意,Lisa性别错误地插入为" M"。
因此,我们可以使用sql语句中的更新查询将其更新为" F",如下所示。

UPDATE employee SET gender='F' WHERE id=4;

要更新所有记录:

UPDATE table_name SET column1 = value 1, column2 = value 2,.. column_n = value_n

在上面的语法中,更新没有任何条件发生,并且将更新表的所有记录。
假设我们要从Employee表中删除Gender列值。
我们可以使用update查询对所有行进行批量更新,如下所示。

UPDATE employee SET gender=null; --sets gender value to NULL

UPDATE employee SET gender=null; --clears gender value for all rows

使用update查询时要考虑的最重要的一点是where子句,因为更新依赖于WHERE子句。

将基于WHERE子句选择将要更新的记录,如果没有WHERE子句,则将更新表的所有记录。

SQL更新选择

有时我们遇到这样的情况,我们想通过从另一个表中选择值来更新一个表数据。
假设我们有两个表-POSTS和AUTHORS。
下面的SQL查询显示了它们的结构以及为我们的SQL Update Select查询示例生成的一些示例数据。

CREATE TABLE `AUTHORS` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `POSTS` (
`id` int(11) NOT NULL,
`title` varchar(20) DEFAULT NULL,
`author_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert into authors (id, name) values
(1, 'hyman'),
(2, 'Anupam'),
(3, 'Ram');

insert into posts (id, title, author_id) values 
(1, 'Java', 1),
(2, 'Python', 2),
(3, 'SQL', 3),
(4, 'Android', 1);

如果您查看上述设置,则AUTHORS表似乎没有用,因为它的作用是将作者姓名映射到帖子。
因此,我们可以在POSTS表中添加一列作者姓名,并从AUTHORS表中的相应行中填充其值。

我们可以使用以下查询更改POSTS表。

alter table POSTS add column author_name varchar(20);

下面是带有select查询的sql更新,用于更新另一个表中的一个表列数据。

UPDATE POSTS SET author_name = (select name from AUTHORS where POSTS.author_id = AUTHORS.id);

SQL更新联接示例

我们也可以使用联接执行上述更新操作。
使用内部连接查询的以下SQL更新将具有与使用选择查询的以上SQL更新相同的结果。

UPDATE POSTS AS P
INNER JOIN AUTHORS AS A ON P.author_id = A.id
SET P.author_name = A.name;

请注意,以上所有查询均针对MySQL数据库,对于其他数据库,可能需要进行少量更改。
但是底层的操作和输出将保持不变。