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;
- savepoint a
- update t_student set name = 'student-10=2' where id = 10;
- update t_student set name = 'student-15=2' where id = 15;
- rollback to a;