尚硅谷之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` = '教学部'; |