MySQL数据修改语句

MySQL数据修改语句

在 MySQL中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。

基础语法

UPDATE 语句的基本语法

使用 UPDATE 语句修改单个表,语法格式为:

UPDATE <表名> SET 字段 1=1 [,字段 2=2] 
[WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]

语法说明如下:

  • <表名>:用于指定要更新的表名称。
  • SET 子句:用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
  • WHERE 子句:可选项。用于限定表中要修改的行。若不指定,则修改表中所有的行。
  • ORDER BY 子句:可选项。用于限定表中的行被修改的次序。
  • LIMIT 子句:可选项。用于限定被修改的行数。

注意:修改一行数据的多个列值时,SET 子句的每个值用逗号分开即可。

修改表中的数据

【实例 1】在 tb_courses_new 表中,更新所有行的 course_grade 字段值为 4,输入的 SQL 语句和执行结果如下所示。

mysql> UPDATE tb_courses_new
    -> SET course_grade=4;
Query OK, 3 rows affected (0.11 sec)
Rows matched: 4  Changed: 3  Warnings: 0
mysql> SELECT * FROM tb_courses_new;
+-----------+-------------+--------------+------------------+
| course_id | course_name | course_grade | course_info      |
+-----------+-------------+--------------+------------------+
|         1 | Network     |            4 | Computer Network |
|         2 | Database    |            4 | MySQL            |
|         3 | Java        |            4 | Java EE          |
|         4 | System      |            4 | Operating System |
+-----------+-------------+--------------+------------------+
4 rows in set (0.00 sec)

根据条件修改表中的数据

【实例 2】在 tb_courses 表中,更新 course_id 值为 2 的记录,将 course_grade 字段值改为 3.5,将 course_name 字段值改为“DB”,输入的 SQL 语句和执行结果如下所示。

mysql> UPDATE tb_courses_new
    -> SET course_name='DB',course_grade=3.5
    -> WHERE course_id=2;
Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> SELECT * FROM tb_courses_new;
+-----------+-------------+--------------+------------------+
| course_id | course_name | course_grade | course_info      |
+-----------+-------------+--------------+------------------+
|         1 | Network     |            4 | Computer Network |
|         2 | DB          |          3.5 | MySQL            |
|         3 | Java        |            4 | Java EE          |
|         4 | System      |            4 | Operating System |
+-----------+-------------+--------------+------------------+
4 rows in set (0.00 sec)

注意:保证 UPDATE 以 WHERE 子句结束,通过 WHERE 子句指定被更新的记录所需要满足的条件,如果忽略 WHERE 子句,MySQL 将更新表中所有的行。

复杂修改案例

案例1 (自己为条件修改自己数据)

错误写法

update  t_student_gradeclass_course   
set gradeClassID=gradeClassID+5
WHERE id in(
        SELECT b.id FROM  t_student as a 
        INNER JOIN  t_student_gradeclass_course  as b on a.id=b.studentID
        WHERE b.gradeClassID NOT IN  (SELECT id FROM t_grade_class WHERE grade='十六年级')
) 

1093 - You can’t specify target table ‘t_student_gradeclass_course’ for update in FROM clause

翻译: 你不能在表子句中指定更新的目标表’t_student_gradeclass_course’

因为在mysql中不允许修改的表作为,修改表where的子查询,oracle就可以

解决办法 : 将修改条件放入一个虚拟表中就行了

正确写法

update  t_student_gradeclass_course   
set gradeClassID=gradeClassID+5
WHERE id in(
    -- 虚拟表
    SELECT id FROM (
    	-- 修改条件
        SELECT b.id FROM  t_student as a 
        INNER JOIN  t_student_gradeclass_course  as b on a.id=b.studentID
        WHERE b.gradeClassID NOT IN  (SELECT id FROM t_grade_class WHERE grade='十六年级')
        ) as a
) 

案例2(多表协同更新)

方式一(关联方式)

在这里插入图片描述

方式二(内外连接方式)
在这里插入图片描述

点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
如有侵权,请私信联系我
感谢,配合,希望我的努力对你有帮助^_^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡安民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值