mysql 多个表 update
阅读(614)
2018-02-09
mysql没有update select语法,但有Multiple-table语法,可以内联更新,当然任何类型的联合也是可以的,如left join、right join、inner join。
UPDATE Multiple-table语法
来看看Multiple-table语法
UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
如何使用呢?
首先2建表个表作为演示用:
-- 用户表 CREATE TABLE `user` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `type` int DEFAULT '0', PRIMARY KEY (`id`), KEY `name` (`name`), KEY `type` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 学生表 CREATE TABLE `student` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `type` int DEFAULT '0', PRIMARY KEY (`id`), KEY `name` (`name`), KEY `type` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
向两个表插入几条测试数据
INSERT INTO `user`(`name`,`type`) values('张三',1); INSERT INTO `user`(`name`,`type`) values('李四',1); INSERT INTO `student`(`name`,`type`) values('zhangsan',2); INSERT INTO `student`(`name`,`type`) values('lisi',2);
使用multiple-table UPDATE从user表更新数据到student表(下面作为参考的方式但仅不限于此方式)
-- 逗号操作符的内部联合 UPDATE `student` s,`user` u SET s.`name`=u.`name`,s.`type`=u.`type` WHERE u.`id`=s.`id`; -- left join更新 UPDATE `student` s LEFT JOIN `user` u ON u.`id`=s.`id` SET s.`name`=u.`name`,s.`type`=u.`type`; -- left join条件更新 UPDATE `student` s LEFT JOIN `user` u ON u.`id`=s.`id` SET s.`name`=u.`name`,s.`type`=u.`type` WHERE u.`type`=1;
更新后
mysql> select * from student; +----+------+------+ | id | name | type | +----+------+------+ | 1 | 张三 | 1 | | 2 | 李四 | 1 | +----+------+------+ 2 rows in set (0.00 sec)
注意:不能把ORDER BY或LIMIT与multiple-table UPDATE同时使用。
您不能在一个子查询中更新一个表,同时从同一个表中选择。
巧妙使用mysql子查询,但存在缺陷,适当地方可以这样用。
-- 子查询 UPDATE `student` s SET s.`name`=(SELECT u.`name` FROM `user` u WHERE u.id=s.id );
原创文章,转载请注明出处:https://www.weizhixi.com/article/73.html