- 对于单表语法,UPDATE语句使用新值更新命名表中现有行的列。SET子句指示要修改的列及其应给定的值。每个值都可以作为表达式给定,也可以使用关键字DEFAULT将列显式设置为其默认值。
- 如果给定WHERE子句,则指定标识要更新哪些行的条件。如果没有WHERE子句,则更新所有行。如果指定了ORDER BY子句,则按指定的顺序更新行。LIMIT子句限制可以更新的行数。
- 对于多表语法,UPDATE更新table_references中指定的每个表中满足条件的行。每个匹配行更新一次,即使它多次匹配条件。对于多表语法,不能使用ORDER BY和LIMIT。
- 对于分区表,此语句的单表形式和多表形式都支持将PARTITION子句用作表引用的一部分。此选项采用一个或多个分区或子分区(或两者)的列表。只检查列出的分区(或子分区)是否匹配,不在这些分区或子分区中的行不会更新,无论它是否满足where_condition。
语法
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET <colum_name> = value,[<colum_name> = value], … ;
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
语法
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET <colum_name> = value,[<colum_name> = value], … ;
参数 |
说明 |
table_reference |
参照的数据表 |
<tbl_name> |
数据表名 |
<colum_name> |
数据列名 |
where_condition |
判断条件 |
row_count |
分页值 |
LOW_PRIORITY |
如果您使用 LOW_PRIORITY 修饰符,则 INSERT 的执行会延迟,直到没有其他客户端正在从表中读取。这包括在现有客户端正在读取以及 INSERT LOW_PRIORITY 语句正在等待时开始读取的其他客户端。因此,发出 INSERT LOW_PRIORITY 语句的客户端可能要等待很长时间。 LOW_PRIORITY 仅影响仅使用表级锁定的存储引擎(例如 MyISAM、MEMORY 和 MERGE)。 注 LOW_PRIORITY 通常不应与 MyISAM 表一起使用,因为这样做会禁用并发插入 |
IGNORE |
如果使用 IGNORE 修饰符,则在执行 INSERT 语句时发生的可忽略错误将被忽略。如果没有 IGNORE,此类 INSERT 语句将因错误而中止。
例如,如果没有 IGNORE,复制表中现有 UNIQUE 索引或 PRIMARY KEY 值的行会导致重复键错误并且语句被中止。使用 IGNORE,该行将被丢弃并且不会发生错误。忽略的错误会生成警告。 IGNORE 对插入,分区表有类似的影响,其中没有找到与给定值匹配的分区。
使用 INSERT IGNORE 时,对于包含不匹配值的行,插入操作会静默失败,但会插入匹配的行。使用 IGNORE,将无效值调整为最接近的值并插入;会产生警告,但语句不会中止。您可以使用 mysql_info() C API 函数确定实际插入表中的行数。
您可以使用 REPLACE 而不是 INSERT 来覆盖旧行。在处理包含重复旧行的唯一键值的新行时,REPLACE 与 INSERT IGNORE 对应:新行替换旧行而不是被丢弃。 |
示例
UPDATE student
SET name = '张三';
示例
UPDATE student
SET name = '张三'
WHERE id = '001';