mysql学习3外键、事务和索引

外键

column 列

作用:
	表之间联系的标识。
语法:
	foreign key(col) references other_tn(o_col);
例:
	foreign key(id) references user(id);
	把自己的id和user表的id关联起来,注意,在哪一个设置外键,可以理解这个表是从属于那个表的。
限制条件:
	外键列的类型要和对方主键列类型保持一致
	外键列中的值必须是对方主键列中值的子集
	插入数据先插入主表
	删除数据先删除从表
分类:
	一对一:
		就是表与表之间对应的数据是唯一的,就像丈夫表和妻子表,彼此之间只能对应一个。
	一对多:
		表与表的数据可以对应多个,比如说买家表和订单表,一个买家可以有多个订单,但是一个订单只能有一个买家。
	多对多:
		表与表之间可以多对多,比如说学生表和选课表,一个学生可以选多个课程,而一个课程又可以被多个学生选择。这个时候借助第三方表来实现。

事务

原因 :
	有些操作,要么全部执行,要不全部回退,这样的操作构成了事务,比如银行转账,要么转成功,要么转失败,但是钱的数量不能变。
开启事务:
	begin或start transaction
结束事务:提交事务
	commit:语句执行,如果遇到错误,回复到错误之前的状态(称为数据回滚)
	rollback:手动回滚,自己控制的
特性:
	Atomicity(原子性):事务是最小的不可分割的单位
	Consistency(一致性):事务的前后,数据的状态前后是一致的,也就是说前后的数据量不改变
	Isolation(隔离性):事务之间相互独立,互不影响
	Durability(持久性):事务一旦提交,就永久的保存到数据库中
事务的并发问题
脏读:	
	事务A读取事务B中的数据,但事务B回滚了或再次更新了数据,称事务A读取到的数据为脏数据,注意,这时的事务B未提交
不可重复读:
	事务A多次读取到的数据的过程中,事务B更新了次数据并提交了事务,称之为不可重复度,注意:提交了事务
幻影读:
	事务A多次读取一张表额过程,数据的数量不一致,称之为幻影读。
更新丢失:
	在对数据更新的过程中,多个事务对同一个操作时,后操作的会覆盖前面操作的。
几种问题的区别:
	脏读和不可重复度的区别:脏读是事务B未提交事务,而不可重复读,是提交了事务
	幻影读和脏读的区别:幻影读是数据额数量改变了,也就是对数据进行添加或者删除,而脏读金额不可重复读,是数据不一致,而本身的数量没有改变。
处理
事件隔离级别脏读不可重复度幻影读
读未提交(read uncommitted)YYY
读提交(read committed)NYY
可重复度(repeatable read)NNY
串行化(serializable)NNN
设置隔离级别:
	set session transaction isolation level 隔离级别
查看隔离级别:
	select @@tx_isolation;
隔离级别逐渐增加,但是并发效率逐渐降低。
作用:
	为了解决数据更新丢失问题
方法:
	为每个事务加个锁,使每次都只能执行一个事务,也就是在同等时间内,只能有一个事务对这个数据进行处理。
种类:
	悲观锁	在select后面加for update,行级锁,排他锁
	乐观锁	在数据后面加一列version用来记录修改的次数。每次都比较version,来确定是不是已经修改过了
注意:
	在查询后面加for update,相当于告诉其他事务,我在使用这个记录。

索引

索引的作用:
	提高查找效率
应用:
	表中的主键列和外键列和唯一列默认有索引
语法:
	index 索引名(列名)
例:
单索引:
	create table user(id int primary key,name varchar(20),index name_in(name))
	给name加上索引
多索引:
	create table user(id int primary key ,name varchar(20),age int,index l_index(name,age))
	以name和age为索引,在同时查找这两个的时候,会加快查询速度,但是当只查询一个的时候,不提高查找速度。
删除索引:
	drop index 索引名 on 表名;
查看索引:
	show index from 表名;
索引特性:
	对查询速度有增益
	但是会有额外的索引维护的消耗
	索引不是越多越好,会浪费内存

SQL分类

数据查询语言DQL(Data Query Language):select、where、order by、group by、having。
数据定义语言DDL(Data Definition Language):create、alter、drop。
数据操作语言DML(DataManipulation Language):insert、update、delete 。
事务处理语言TPL(Transaction Process Language):commit、rollback 。
数据控制语言DCL(Data Control Language):grant、revoke。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值