2023年8月3日发(作者:)
MySQLUpdate语句⽤法mysql5.6 ⽀持explain update之前的版本,explain 只⽀持select,但在最新的5.6版本中,⽀持explain update/delete以下的⽂章主要介绍的是 update 语句的实际⽤法,我们⾸先是以单表的UPDATE语句来引出实现MySQL update 语句的实际⽅案,以下就是⽂章的详细内容描述,望你看完之后会有收获。单表的MySQL UPDATE语句:
1. UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
2. SET col_name1=expr1 [, col_name2=expr2 ...]
3. [WHERE where_definition]
4. [ORDER BY ...]
5. [LIMIT row_count]
多表的UPDATE语句:
1. UPDATE [LOW_PRIORITY] [IGNORE] table_references
2. SET col_name1=expr1 [, col_name2=expr2 ...]
3. [WHERE where_definition]
UPDATE语法可以⽤新值更新原有表⾏中的各列。SET⼦句指⽰要修改哪些列和要给予哪些值。WHERE⼦句指定应更新哪些⾏。如果没有WHERE⼦句,则更新所有的⾏。如果指定了ORDER BY⼦句,则按照被指定的顺序对⾏进⾏更新。LIMIT⼦句⽤于给定⼀个限值,限制可以被更新的⾏的数⽬。MySQL UPDATE语句⽀持以下修饰符:如果您使⽤LOW_PRIORITY关键词,则UPDATE的执⾏被延迟了,直到没有其它的客户端从表中读取为⽌。如果您使⽤IGNORE关键词,则即使在更新过程中出现错误,更新语句也不会中断。如果出现了重复关键字冲突,则这些⾏不会被更新。如果列被更新后,新值会导致数据转化错误,则这些⾏被更新为最接近的合法的值。如果您在⼀个表达式中通过tbl_name访问⼀列,则UPDATE使⽤列中的当前值。例如,以下语句把年龄列设置为⽐当前值多⼀:
1. MySQL> UPDATE persondata SET ageage=age+1;
MySQL UPDATE赋值被从左到右评估。例如,以下语句对年龄列加倍,然后再进⾏增加:
1. MySQL> UPDATE persondata SET ageage=age*2, ageage=age+1;
如果您把⼀列设置为其当前含有的值,则MySQL会注意到这⼀点,但不会更新。如果您把被已定义为NOT NULL的列更新为NULL,则该列被设置到与列类型对应的默认值,并且累加警告数。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于⽇期和时间类型,默认值为“zero”值。UPDATE会返回实际被改变的⾏的数⽬。MySQL_info() C API函数可以返回被匹配和被更新的⾏的数⽬,以及在UPDATE过程中产⽣的警告的数量。您可以使⽤LIMIT row_count来限定UPDATE的范围。LIMIT⼦句是⼀个与⾏匹配的限定。只要发现可以满⾜WHERE⼦句的row_count⾏,则该语句中⽌,不论这些⾏是否被改变。如果⼀个UPDATE语句包括⼀个ORDER BY⼦句,则按照由⼦句指定的顺序更新⾏。您也可以执⾏包括多个表的UPDATE操作。table_references⼦句列出了在联合中包含的表。以下是⼀个例⼦:
1. SQL>UPDATE items,month SET =
2. WHERE =;
以上的例⼦显⽰出了使⽤逗号操作符的内部联合,但是multiple-table UPDATE语句可以使⽤在SELECT语句中允许的任何类型的联合,⽐如LEFT JOIN。注释:您不能把ORDER BY或LIMIT与multiple-table UPDATE同时使⽤。在⼀个被更改的multiple-table UPDATE中,有些列被引⽤。您只需要这些列的MySQL UPDATE权限。有些列被读取了,但是没被修改。您只需要这些列的SELECT权限。如果您使⽤的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同。在此情况下,语句⽆效并被 回滚。同时,更新⼀个单⼀表,并且依靠ON UPDATE功能。该功能由InnoDB提供,⽤于对其它表进⾏相应的修改。⽬前,您不能在⼀个⼦查询中更新⼀个表,同时从同⼀个表中选择。mysql关联多表进⾏update更新操作UPDATE TrackINNER JOIN MVON =_show=_showWHEREtrkid<6等同于UPDATE Track,_show=_showWHERE = andtrkid<6【扩展】根据结果集进⾏update更新操作原表信息表1: am_favorites_4am_favorites_4表af_user_id374374374af_tag_id0089af_content_id535522535522535522af_content_type333表2: am_tag_user_4
am_tag_user_4表atu_user_idatu_tag_idatu_num37437408999更新结果⽬标表: am_tag_user_4am_tag_user_4 表atu_user_id374374atu_tag_id089atu_num78UPDATE am_tag_user_4 tagINNER JOIN am_favorites_4favON _tag_id=_tag_idand _user_id=_user_idINNER JOIN (SELECT af_user_id,af_tag_id,count(*)as cntFROM am_favorites_4,am_tag_user_4where atu_tag_id=af_tag_idand atu_user_id=af_user_idandaf_content_id = 535522andaf_content_type=3andaf_user_id=374group by af_user_id,af_tag_id)AS T1ON _tag_id=_tag_idand _user_id=_user_idSET _num=_
2023年8月3日发(作者:)
MySQLUpdate语句⽤法mysql5.6 ⽀持explain update之前的版本,explain 只⽀持select,但在最新的5.6版本中,⽀持explain update/delete以下的⽂章主要介绍的是 update 语句的实际⽤法,我们⾸先是以单表的UPDATE语句来引出实现MySQL update 语句的实际⽅案,以下就是⽂章的详细内容描述,望你看完之后会有收获。单表的MySQL UPDATE语句:
1. UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
2. SET col_name1=expr1 [, col_name2=expr2 ...]
3. [WHERE where_definition]
4. [ORDER BY ...]
5. [LIMIT row_count]
多表的UPDATE语句:
1. UPDATE [LOW_PRIORITY] [IGNORE] table_references
2. SET col_name1=expr1 [, col_name2=expr2 ...]
3. [WHERE where_definition]
UPDATE语法可以⽤新值更新原有表⾏中的各列。SET⼦句指⽰要修改哪些列和要给予哪些值。WHERE⼦句指定应更新哪些⾏。如果没有WHERE⼦句,则更新所有的⾏。如果指定了ORDER BY⼦句,则按照被指定的顺序对⾏进⾏更新。LIMIT⼦句⽤于给定⼀个限值,限制可以被更新的⾏的数⽬。MySQL UPDATE语句⽀持以下修饰符:如果您使⽤LOW_PRIORITY关键词,则UPDATE的执⾏被延迟了,直到没有其它的客户端从表中读取为⽌。如果您使⽤IGNORE关键词,则即使在更新过程中出现错误,更新语句也不会中断。如果出现了重复关键字冲突,则这些⾏不会被更新。如果列被更新后,新值会导致数据转化错误,则这些⾏被更新为最接近的合法的值。如果您在⼀个表达式中通过tbl_name访问⼀列,则UPDATE使⽤列中的当前值。例如,以下语句把年龄列设置为⽐当前值多⼀:
1. MySQL> UPDATE persondata SET ageage=age+1;
MySQL UPDATE赋值被从左到右评估。例如,以下语句对年龄列加倍,然后再进⾏增加:
1. MySQL> UPDATE persondata SET ageage=age*2, ageage=age+1;
如果您把⼀列设置为其当前含有的值,则MySQL会注意到这⼀点,但不会更新。如果您把被已定义为NOT NULL的列更新为NULL,则该列被设置到与列类型对应的默认值,并且累加警告数。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于⽇期和时间类型,默认值为“zero”值。UPDATE会返回实际被改变的⾏的数⽬。MySQL_info() C API函数可以返回被匹配和被更新的⾏的数⽬,以及在UPDATE过程中产⽣的警告的数量。您可以使⽤LIMIT row_count来限定UPDATE的范围。LIMIT⼦句是⼀个与⾏匹配的限定。只要发现可以满⾜WHERE⼦句的row_count⾏,则该语句中⽌,不论这些⾏是否被改变。如果⼀个UPDATE语句包括⼀个ORDER BY⼦句,则按照由⼦句指定的顺序更新⾏。您也可以执⾏包括多个表的UPDATE操作。table_references⼦句列出了在联合中包含的表。以下是⼀个例⼦:
1. SQL>UPDATE items,month SET =
2. WHERE =;
以上的例⼦显⽰出了使⽤逗号操作符的内部联合,但是multiple-table UPDATE语句可以使⽤在SELECT语句中允许的任何类型的联合,⽐如LEFT JOIN。注释:您不能把ORDER BY或LIMIT与multiple-table UPDATE同时使⽤。在⼀个被更改的multiple-table UPDATE中,有些列被引⽤。您只需要这些列的MySQL UPDATE权限。有些列被读取了,但是没被修改。您只需要这些列的SELECT权限。如果您使⽤的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同。在此情况下,语句⽆效并被 回滚。同时,更新⼀个单⼀表,并且依靠ON UPDATE功能。该功能由InnoDB提供,⽤于对其它表进⾏相应的修改。⽬前,您不能在⼀个⼦查询中更新⼀个表,同时从同⼀个表中选择。mysql关联多表进⾏update更新操作UPDATE TrackINNER JOIN MVON =_show=_showWHEREtrkid<6等同于UPDATE Track,_show=_showWHERE = andtrkid<6【扩展】根据结果集进⾏update更新操作原表信息表1: am_favorites_4am_favorites_4表af_user_id374374374af_tag_id0089af_content_id535522535522535522af_content_type333表2: am_tag_user_4
am_tag_user_4表atu_user_idatu_tag_idatu_num37437408999更新结果⽬标表: am_tag_user_4am_tag_user_4 表atu_user_id374374atu_tag_id089atu_num78UPDATE am_tag_user_4 tagINNER JOIN am_favorites_4favON _tag_id=_tag_idand _user_id=_user_idINNER JOIN (SELECT af_user_id,af_tag_id,count(*)as cntFROM am_favorites_4,am_tag_user_4where atu_tag_id=af_tag_idand atu_user_id=af_user_idandaf_content_id = 535522andaf_content_type=3andaf_user_id=374group by af_user_id,af_tag_id)AS T1ON _tag_id=_tag_idand _user_id=_user_idSET _num=_
发布评论