sql1复习笔记12

sql1复习笔记12

1.连接查询-mysql不支持fulljoin

用左连接和右连接通过union连接上

select * from person left join card on person.cardId=card.id 
union 
select * from person right join card on person.cardId=card.id;

连接的好处就是不用创建外键。

2.事务-事务用来做什么?

mysql事务:
事务其实是一个最小的不可分割的工作单元。事务能够保证一个业务的完整性。
比如我们的银行转账:
a→-100

update user set money=money-100 where name='a';

b→+100

update user set money=money+100 where name='b';

在实际的程序中,如果只有一条执行成功,而另外一条没有执行成功,就会出现数据前后不一致。
事务要解决的问题:
多条sql语句,可能会有同时成功的要求,要么就同时失败。

3.事务-如何控制事务commit_rollback

mysql中如何控制事务?

  1. mysql默认是开启事务的。(自动提交)
mysql> select @@autocommit;

默认事务开启的作用是?
当我们去执行一个sql语句的时候,效果会立即体现出来,且不能回滚。

create database bank;
use bank;
create table user1(
	id int primary key,
	name varchar(20),
	money decimal
);
insert into user1 value(1,'a',1000);
--事务回滚:撤销sql语句执行效果
rollback;
--能回滚的办法:设置默认事务为0(mysql自动提交为false)
set autocommit = 0;

insert into user1 value(2,'b',2000);
rollback;
--因为b的输入没有提交,显示的是一个复制表,如果想让b提交为真表:
commit;
//一旦提交是不可回滚的

事务有两个:
自动提交:autocommit=1;
手动提交:手动输入commit;
回滚:rollback。

如果说这个时候转账:

update user1 set money=money-100 where name='a';
update user1 set money=money+100 where name='b';
rollback

事务给我们提供了一个反悔的机会。

4.事务-手动开启事务begin_start_transaction

set @@autocommit=1;
//现在不能rollback了,如果还是想rollback,可以用:
beginstart transaction
//这两个语句都可以帮我们手动开启一个事务。
update user1 set money=money-100 where name='a';
update user1 set money=money+100 where name='b';
rollback//设置完此时不能回滚
//(1)
begin;
update user1 set money=money-100 where name='a';
update user1 set money=money+100 where name='b';
rollback;
//(2)
start transaction;
update user1 set money=money-100 where name='a';
update user1 set money=money+100 where name='b';
rollback;

回滚之后再回滚还能回滚,怎么办?commit。

5.事务-ACID特征与使用

以上主要是讲一致性。

事务的四大特征:
A:原子性,Atomicity。事务是最小的单位,不可以再分割;
C:一致性,consistency。事务要求,同一事务中的sql语句,必须保证同时成功或者失败;
I:隔离性,isolated。事务1和事务2之间是具有隔离性的;
D:持久性,durable。事务一旦结束,就不可更改。

事务开启方式:

  1. 修改默认提交 set autocommit=0;
  2. begin;
  3. start transaction。

事务提交方式:

  1. 手动commit;
  2. rollback。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值