update语句介绍
这是官网对update的介绍UPDATE Statement
开发中,一般我们都是写这种 update table a set field =value where id=x语句
不过也会遇到特殊的.比如想把table a 中的b列赋值给c列.或者说把table c 中的d列赋值给table a中的b列,这种情况下应该怎么做呢?

情况一 单表a列赋值给b列

情景:需要将书籍简称字段的值给书籍全程的字段赋值过去
首先来个简单的表结构

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `simple_name` varchar(10) DEFAULT NULL COMMENT '书籍简称',
  `full_name` varchar(50) DEFAULT NULL COMMENT '书籍全称',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='书籍信息表';

然后插入两条数据

INSERT INTO `book` (`id`, `simple_name`, `full_name`, `price`) VALUES ('1', '哈利波特', NULL, '12.00');
INSERT INTO `book` (`id`, `simple_name`, `full_name`, `price`) VALUES ('2', '冰与火之歌', NULL, '20.00');

效果如下
在这里插入图片描述
这时候发现full_name字段为空,这时候需要将simple_name 给赋值过去
编写sql语句:

UPDATE book a ,(SELECT simple_name,id from book) b set a.full_name =b.simple_name where a.id=b.id;

这样就可以将full_name列给赋值了.
注意表名别名要有语义

情况二 多表a表 a列赋值给b表b列

复用book表
创建一个book_order表

CREATE TABLE `book_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_id` int(10) DEFAULT NULL COMMENT '书籍id',
  `full_name` varchar(50) DEFAULT NULL COMMENT '书籍全称',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='书籍信息表';
INSERT INTO `book_order` (`id`, `book_id`, `full_name`, `price`) VALUES ('1', '1', '哈利波特3', '100.00');
INSERT INTO `book_order` (`id`, `book_id`, `full_name`, `price`) VALUES ('2', '2', '冰与火之歌2', '300.00');

情景:来了个需求book表中的full_name字段的值要以book_order表中的full_name为准.要问为啥就是历史遗留问题
编写sql:

UPDATE book a ,(SELECT full_name,id,book_id from book_order) b set a.full_name =b.full_name where a.id=b.book_id;

即可解决

update语法

Single-table syntax:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

Multiple-table syntax:

UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET assignment_list
    [WHERE where_condition]
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐