MySql、索引

数据库引擎

默认引擎:Mysql在5.1之前默认存储引擎是MyISAM;之后默认存储引擎是InnoDB

通过命令查看所支持的引擎

默认引擎为InnoDB :从图片中可以看出InnoDB支持事务处理,其他的引擎都不支持,同时支持行级锁外键,事务是其最大的特点,在大量的update和insert情况下很大可能涉及到事务处理这就需要InnoDB引擎来支持了,特别是高并发的情况下

MyISAM:基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.由ISAM可知读取数据时表现优异,但是不支持事务外键

还有一些细节上的差异-附上文章

主键 

由表中的一列或者一组列来指定,该列(该组列)在每一行数据都不同,所以可以唯一标识某一行记录,该列(该组列)对应的字段就为主键。一个表中最多只能一个主键

表中可以不设置主键,但是在平时的操作中应将其当作一种规范和习惯。数据库设计也应该保证每个表都有一个主键,以便后续操作及管理,主键值必定不为NULL并且每行都不同

MySQL中主键创建时会默认自动为该主键添加主键索引

 

外键

 用于对两张表进行关联,由数据库自身保持表之间数据的一致性和完整性,在一定程度上解放了开发人员,不然还需要开发人员通过程序来维持,特别在一个大型系统中数据库本身就存在很多表每张表还存在大量的数据,由人工手动维持非常容易出错。根据外键还可以进行一些级联操作,如后面的级联删除

非主键字段指向另一张表的主键时,该字段就为外键,该表作为从表,被指向的主键所在表为主表。这两个字段的意义应该是相同的,只是存在于两张表中,以此来建立两张表之间的联系。

一张表可以有多个外键

条件:

外键需要数据库引擎的支持,如InnoDB,MyISAM表目前还不支持外键

在两张表中有外键关系的字段数据类型必须相同(可以相互转换的也可以)

默认限制:

在向有外键的表(从表)中插入数据时如果该外键字段的值在主表中主键列下找不到相同的值,则会操作失败。拿下面级联删除的两张表来说,如果说user_id=10的用户不存在,那么我在order表中增加一条记录,该记录表示user_id=10的用户的一条订单。试问、用户都不存在,那数据库中能够存在与他相关的订单信息么?

然后就是删除问题,如果删除主表中user_id=1这个用户(没有使用ON  DELETE CASCADE的情况下),如果从表order中存在user_id=1的数据,那么此时会报错删除失败,因为存在相关数据,此时需要将从表中相关的数据删除了,再去主表中删除user_id=1的数据才会成功,但是有时候我们希望当某个用户被删除了,该用户的其他相关数据也应该一并被删除,此时可以通过级联删除来完成,详细使用见下面的例子。

索引

索引(key)是存储引擎用于快速找到记录的一种数据结构,用于快速找出在某个列中有一特定值的行,就好像我们书本中的目录,我们需要看哪篇文章直接在目录中找出对应的页码,然后根据页码就能快速找到该文章,如果没有目录就需要一页一页去翻,这种效率是很低的,特别是在表的数据量特别庞大时尤为明显。

索引是由数据库存储引擎实现的,不同的引擎使用不同的索引

索引分类

MySQL索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引

单列索引:一个索引只包含一个列,一个表可以有多个单列索引.

组合索引:一个组合索引包含两个或两个以上的列

主键索引:指定指端为主键时会自动为其创建主键索引,通常选择与业务无关的列,一般设置为int型并且自动增长

 

级联删除  ON  DELETE CASCADE

 作用:通常在删除数据时,如果两张表有关联关系 例如  A表的主键是B表的外键,B表便成了从表,A表为主表  那么我们通常希望

删除主表A中的一条数据时B表中相关联的数据能够自动删除  示例如下

user表存储用户信息

user_id为主键

order表存放订单信息   user_id为外键,与user表主键相关联

在实际中应用中,假如需要删除某个用户,那他的订单信息等与用户关联的信息我们都应该删除以保持一致性,用户都不存在了,这些信息就是垃圾信息,没有人与他关联,放在数据库中会占用空间。

下面我们在主表user中删除user_id为3的用户

再转到order表中可以发现user_id为3的用户数据不存在了

这样在处理某些业务的情况下就很方便   只需要我们在创建外键的时候在语句末尾加上ON  DELETE CASCADE即可,在删除主表数据时就会级联删除从表中关联的数据,上述示例该条语句如下:

FOREIGN KEY (`user_id`) REFERENCES `test`.`user` (`user_id`) ON DELETE CASCADE

 

注意:

因为关联关系由外键来维持,这种方式需要数据库引擎支持外键才行,如innodb

级联删除必须对数据库的设计进行详细分析,清楚表之间的关联关系以及业务逻辑,否则使用不当会造成意想不到的后果

此种方式是由数据库来帮我们完成,所以会增加数据库的负担,在使用时应根据实际业务来选择,使用不当会极大降低数据库性能

 

 

持续补充中。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值