根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。 UPDATE是DML(数据操作语言)语句,用于修改表中的行. 更新[LOW_PRIORITY] [IGNORE] table_reference SET Assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] 值: {expr |默认值 分配: col_name =值 assignment_list: 任务[,任务] ... 更新[LOW_PRIORITY] [IGNORE] table_references SET Assignment_list [WHERE where_condition] 对于单表语法update语法,UPDATE语句使用新值更新指定表中现有行的列. SET子句指示要修改的列以及应给出的值. 每个值都可以作为表达式给出,或者关键字DEFAULT显式将列设置为默认值. WHERE子句(如果提供)指定了确定要更新哪些行的条件. 没有WHERE子句,所有行都会更新. 如果ORDER BY指定子句,则将按指定顺序更新行. LIMIT子句对可更新的行数设置限制. 对于多表语法,UPDATE更新每个表中名为table_references的行以满足条件. 即使匹配条件是多次,每个匹配的行也将被更新一次. 对于多表语法,不能使用ORDER BY和LIMIT. where_condition是一个表达式,并且每一行都更新为true. UPDATE语句支持以下修饰符: 在MySQL 5.5.18和更高版本中,UPDATE IGNORE语句(包括带有ORDER BY子句的语句)被标记为基于语句的不安全复制. (这是因为行的更新顺序决定了忽略哪些行. )使用基于语句的模式时,这些语句在错误日志中生成警告,并在使用时使用基于行的格式写入二进制日志混合模式. 如果您从表中访问表中的UPDATE列,请使用该列的当前值. 例如,以下语句将col1设置为比当前值大一个: 更新t1设置col1 = col1 + 1; 以下语句中的第二个赋值将col2设置为当前(更新的)col1值,而不是原始的col1值. 结果,col1和col2具有相同的值. 此行为不同于标准SQL. 更新t1设置col1 = col1 + 1,col2 = col1; 单表UPDATE分配通常从左到右进行评估. 对于多表更新,不能保证以任何特定顺序执行分配. 如果将列设置为当前值,MySQL将注意到这一点,并且不会对其进行更新. 如果NOT NULL通过设置更新声明的列,则启用NULL严格SQL模式时将发生错误;否则,将列设置为列数据类型的隐式默认值,并增加警告计数. 隐式默认值为0数字类型,字符串类型为空字符串(''),日期和时间类型为“零”值. UPDATE返回实际更改的行数. mysql_info()C API函数返回已匹配和更新的行数,以及UPDATE中出现警告的次数. 可用于限制的范围. 子句是行匹配的限制. 一旦找到满足该子句的行,该语句就会停止,无论它们是否实际上已更改. 如果UPDATE语句包含ORDER BY子句,则将按该子句指定的顺序更新行. 这在某些情况下可能很有用update语法,否则可能会导致错误. 假设表t包含其ID具有唯一索引的列. 以下语句可能由于重复的键错误而失败,具体取决于行的更新顺序: UPDATE t SET id = id + 1; 例如,如果表在id列中包含1和2,并且在2更新为3之前将1更新为2,则会发生错误. 为避免此问题,请添加ORDER BY子句,以便在具有较小ID值的行之前更新具有较大ID值的行: 更新t SET id = id + 1 ORDER BY ID DESC; 您还可以执行UPDATE操作来覆盖多个表. 但是,不能对多个表UPDATE使用ORDER BY或LIMIT. table_references子句列出了连接中涉及的表. 语法在第13.2.9.2节“ JOIN语法”中描述. 这是一个示例: 更新项目,每月设置项目. price= month.price WHERE items.id = month.id; 上一个示例显示了使用逗号运算符的内部联接,但是多个表UPDATE语句可以使用该语句中允许的任何类型的联接SELECT,例如LEFT JOIN. 如果您使用涉及具有外键约束的InnoDB表的UPDATE多表语句,则MySQL优化程序可能以与其父/子关系不同的顺序处理表. 在这种情况下,该语句失败并回滚. 而是更新一个表,并依靠ON UPDATE函数InnoDB来相应地修改其他表. 您无法更新表并从子查询的同一表中进行选择. UPDATE使用的存储引擎(例如分区表MyISAM)使用表级锁来锁定表中的所有分区. 对于使用存储引擎的表(例如InnoDB使用行级锁定),不会发生这种情况.
|
温馨提示:喜欢本站的话,请收藏一下本站!