union

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

sql准备

CREATE TABLE `user_info` (
  `id`   BIGINT(20)  NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL DEFAULT '',
  `age`  INT(11)              DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_index` (`name`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

INSERT INTO user_info (name, age) VALUES ('i', 15);
INSERT INTO user_info (name, age) VALUES ('p1', 60);
INSERT INTO user_info (name, age) VALUES ('p2', 65);

CREATE TABLE `order_info` (
  `id`           BIGINT(20)  NOT NULL AUTO_INCREMENT,
  `user_id`      BIGINT(20)           DEFAULT NULL,
  `product_name` VARCHAR(50) NOT NULL DEFAULT '',
  `productor`    VARCHAR(30)          DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_product_detail_index` (`user_id`, `product_name`, `productor`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

INSERT INTO order_info (user_id, product_name, productor) VALUES (1, 'p1', 'WHH');
INSERT INTO order_info (user_id, product_name, productor) VALUES (1, 'p2', 'WL');
INSERT INTO order_info (user_id, product_name, productor) VALUES (1, 'p3', 'DX');

演示

select u.`name` from user_info u 
union
select o.product_name from order_info o 

结果分析

  • union将两条sql的结果合并
  • 并且去掉重复的数据
  • select中可以有多个字段,但是两个sql的字段数量必须一致

savepoint

保存点是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。

回退事务操作

  • 设置保存点 savepoint a
  • 取消保存点a之后事务 rollback to a
  • 取消全部事务 rollback

这个回退事务,必须是没有commit前使用的;如果事务提交了,那么无论你刚才做了多少个保存点,都统统没有。 如果没有手动执行commit,而是exit退出会话了,那么会自动提交 。

实验

  • set autocommit = 0;
  • update t_student set name = 'student-10=1' where id = 10;
    WX20200109-111444@2x
  • savepoint a
  • update t_student set name = 'student-10=2' where id = 10;
  • update t_student set name = 'student-15=2' where id = 15;
    WX20200109-111647@2x
  • rollback to a;
    WX20200109-111824@2x

<=>

https://www.cnblogs.com/duanxz/p/5292029.html