尚硅谷之MySQL基础

9.2 修改数据

1、语法

UPDATE 表名称 SET 字段名1 = 值1, 字段名2=值2,......  【WHERE  条件】;

UPDATE 表1,表2,......   SET  表1.字段名1 = 值1, 表1.字段名2=值2,表2.字段1 = 值1, 表2.字段2=值2......  【WHERE  条件】;

2、说明

  • 如果不写where条件,会修改所有行
  • 值可以是常量值、表达式、函数
  • 可以同时更新多张表

如果两个表没有建立外键,但逻辑上有外键关系

  • 如果修改从表外键字段的数据,要注意查看主表参照字段的值是否存在
  • 如果修改主表的被参考的字段的值,要注意查看从表的外键是否有依赖该值,如果有
  • 如果外键是on update RESTRICT或on update NO ACTION,那么要先处理从表的数据,才能修改
  • 如果外键是on update SET NULL 或 on update CASCADE,那么直接修改,从表的外键字段会自动处理

3、示例

#修改所有人的基本工资,涨薪5%

UPDATE t_salary

SET basic_salary = basic_salary * 1.05;

#修改"孙俪"的手机号码为"13709098765",生日为"1982-09-26"

UPDATE t_employee SET tel = '13709098765',birthday = '1982-09-26'

WHERE ename = '孙俪';

#修改"邓超"的入职日期为今天

UPDATE t_employee SET hiredate = CURDATE() WHERE ename ='邓超';

#修改"咨询部"的主管id为6

UPDATE t_department SET manager_id =6 WHERE did = 2;

#修改"教学部"的主管id为1

UPDATE t_department SET manager_id =1 WHERE did = 1;

#修改"教学部"的主管id为"孙红雷"的编号

UPDATE t_department,t_employee

SET t_department.manager_id =t_employee.eid

WHERE t_department.`dname` = '教学部'

 AND t_department.`did` = t_employee.`dept_id`

 AND t_employee.ename = '孙红雷';

#修改所有员工的领导编号为该员工所在部门的主管编号

UPDATE t_employee,t_department

SET t_employee.mid = t_department.manager_id

WHERE t_employee.dept_id = t_department.did;

#修改教学部的主管编号,以及该部门所有员工的领导编号为"邓超"的编号

UPDATE t_department,t_employee

SET t_department.manager_id =t_employee.eid

WHERE t_department.`dname` = '教学部'

 AND t_department.`did` = t_employee.`dept_id`

 AND t_employee.ename = '邓超';

 

UPDATE t_employee,t_department

SET t_employee.mid = t_department.manager_id

WHERE t_employee.dept_id = t_department.did

 AND t_department.`dname` = '教学部';