• SQL基础语法—update语句


    1 update语句介绍

    update语句用来修改表中的数据内容

    Single-table syntax:
    
    UPDATE [LOW_PRIORITY] [IGNORE] table_reference
        SET assignment_list
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    
    Multiple-table syntax:
    
    UPDATE [LOW_PRIORITY] [IGNORE] table_references
        SET assignment_list
        [WHERE where_condition]
    
    

    update语句的常规用法

    update students set sname='abcd',gender='1' where sid=1;
    update student,students set students.sname=student2.sname,students.gender=students2.gender where students.sid=students2.sid;
    
    • 单表修改是指修改指定单个表中的已经存在数据的一个或多个列的数据;set短语后面跟要修改的列和值
    • where子句表示限定要修改表中的哪些行数据,如果没有where子句则表示所有行都要修改;order by子句表示update数据按照指定的顺序进行;limit子句表示限定修改数据的行数
    • 多表修改是指修改table_references指定的多个表中满足条件的行数据,多表修改不允许使用order bylimit子句
    • 执行update语句需要修改表的权限
    • low_priority关键词表示修改语句需要等待其他链接的读此表操作结束后再执行,之作用在MylSAMMEMORYMERGE存储引擎
    • ignore关键词表示当前修改语句碰到违反唯一性约束条件等情况时,语句不会报错回退而是报警告信息

    2 update语句使用示例

    2.1 单表修改

    ##修改全表中的数据,慎用
    mysql> update student2 set sname='aaa';
    
    ##加上where限制条件,修改指定行的数据
    mysql> update student2 set sname='aaa' where sid=1006;
    
    ##sid字段比原值增加1,哪一行先执行时随机的
    mysql> update student2 set sid=1+sid;
    
    ##将sid字段设置成primary key,会出先以下错误,原因是,哪一行数据的sid先+1是随机的
    mysql> update student2 set sid=1+sid;
    ERROR 1062 (23000): Duplicate entry '1005' for key 'PRIMARY'
    
    ##所以在使用update时,一般会结合order by子句对数据先进行排序
    mysql> update student2 set sid=sid+1 order by sid desc;  ##默认是升序,desc表示降序
    Query OK, 2 rows affected (0.06 sec)
    Rows matched: 2  Changed: 2  Warnings: 0
    
    ##使用limit限定行数,一般和order by配合使用
    mysql> update student2 set sname='sss' order by id limit 2;
    
    
    

    2.2 多表修改

    ##多表修改(表之间通过where条件进行join操作)
    mysql> update items,month set items.price=month.price where items.id=month.id;
    
    

    案例演示:

    ##案例需求:使用一条命令将students表中a,b改成students2中的aa,bb
    mysql> select * from students;
    +-----+-------+--------+---------+
    | sid | sname | gender | dept_id |
    +-----+-------+--------+---------+
    |   1 | a     |      1 |       1 |
    |   4 | b     |      1 |       1 |
    +-----+-------+--------+---------+
    2 rows in set (0.00 sec)
    
    mysql> select * from students2;
    +-----+-------+--------+---------+
    | sid | sname | gender | dept_id |
    +-----+-------+--------+---------+
    |   1 | aa    |      1 |       1 |
    |   3 | bb    |      1 |       1 |
    |   4 | cc    |      1 |       1 |
    +-----+-------+--------+---------+
    3 rows in set (0.00 sec)
    
    
    mysql> mysql> update students,students2 set students.sname=students2.sname where students.sid=students2.sid;
    
    

    3 回滚机制简单设置

    MySQL中的autocommit参数控制着是否可以回滚,默认其实开启的,开启代表自动回滚,使用set autocommit=off开启手动回滚功能,使用rollback命令,就可做回滚操作。

    rollback回滚机制:当执行commitrollback命令,表示当前事务的结束,下一个事务开始:

    • commit:终止当前的事物,该命令执行后,rollback不能返回到上个事务的初始状态
    • rollback:回滚当前的操作到此前事务的初始状态

    4 练习

    • 将所有学号小于等于100的学生的系改为education
    mysql> update students set students.dept_id=(select id from dept where dept_name='education');
    
    mysql> update students,dept set students.dept_id=dept.id where sid<=100 and dept_name='education';
    
    • 将姓名为ruthid在100和200之间的老师的姓名改成carey
    mysql> update teacher set teacher.name='carey' where teacher.name='ruth' and id>100 and id<200;
    
  • 相关阅读:
    巡风源码阅读与分析---nascan.py
    自动化代码中,用到了哪些设计模式?
    jmeter提取器的使用及说明
    jmeter的插件管理—jpgc插件下载安装
    unittest之mock测试
    jmeter环境配置及基础使用
    jenkins发送email邮件的配置
    软件性能测试基础说明
    python发送email邮件
    使用SQLyog对mysql数据库的数据结构进行导出、导入
  • 原文地址:https://www.cnblogs.com/dabric/p/12343857.html
Copyright © 2020-2023  润新知