MySQL基础

MySQL基础

为什么要用MySQL

1.数据库的作用

计算机中存在各种各样的数据,如何保存这些数据,一般来说有以下三种方式保存:

(1)内存。内存中的数据进行存储操作非常快;但是内存空间有限,一般只能作为数据暂时的保存。
(2)文件。文件中的数据可以永久保存;但是读取时需要进行频繁的IO操作,速度慢。
(3)数据库。数据库的数据可以永久保存,并且可以利用数据库软件的功能进行读取管理操作;但是需要下载专门的数据库软件。
注意:三种存储方式都有其优劣,需要根据具体情况选择合适的方式。*
2.MySQL的特点
MySQL是一种关系型数据库,前期版本是开源免费的,现在已经被Oracle公司收购,最新版本的MySQL需要付费。

MySQL基本语法

MySQL遵循SQL的语法规范,一般分为CURD四种主要操作。
(1)CURD
DDL:数据定义语言,主要包括一些表,数据库,索引等等涉及到表结构的创建,删除,更改。关键字(create,drop,alter)
DQL:数据查询语言,主要各种简单查询,连接查询。关键字(select)非常重要
DML:数据操纵语言,主要为对表中数据的增删改操作。关键字(insert,update,delete)。
DCL:数据控制语言,主要为一些与数据库安全权限的一些操作。
(2)键的分类
主键:表中唯一标识的数据列或者数据列组合,一张表只能有一个主键,主键非空。
外键:一个表中存在另一个表的主键,称为此表的外键。
超键:可以唯一标识的属性集合为超键。
候选键:可以唯一标识的属性集合,并且没有多余属性,为候选键。
(3)函数
某些时候,我们需要进行一些复杂的操作(类似查找数据库某属性绝对值最大),而这种逻辑稍显复杂的查询不便于将逻辑写在查询语句中,而数据库设计之初就已经考虑到了这些,一般常见的功能都已经集成在函数中。(对于没有此功能的函数,推荐利用编程软件逻辑代码处理,不要写在数据库语言中)

MySQL索引

索引概念
索引的本质是一种数据结构(一般用二叉树实现),可以把表中的某一字段变成索引,索引就会单独占据一部分物理空间,下次查询改字段就会特别快。本质上是一种牺牲空间换取时间的思想。
索引的优缺点
优点:
(1)大大加快数据的检索速度。
(2)可以使用优化隐藏功能(新更新的,通过指定查询方法,操作方式,提高系统性能)。
缺点:
(1)创建、管理索引需要时间与空间。
(2)数据进行增删查改是,相应索引也需要动态维护,降低了速度。
索引类型
(1)主键索引:表中设置为主键的属性或者属性组,自动创建主键索引。
(2)唯一索引:通过设置唯一索引语句设置,唯一索引的数据列不可重复,但可以为null。
创建唯一索引:ALTER TABLE table_name ADD UNIQUE (column1,column2);
(3)全文索引:搜索引擎常用技术。
创建全文索引:ALTER TABLE table_name ADD FULLTEXT (column);
(4)普通索引:通过设置唯一索引语句设置,唯一索引的数据列可以重复,可以为null。
创建普通索引:ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);
创建索引的原则
(1)查询较为频繁的字段建议创建索引,定义为外键的字段建议创建索引。
(3)更新频繁字段不建议创建索引,字段区分度不高不建议创建索引(性别),定义为text,image,bit的数据类型字段不建议创建索引。
(4)创建索引时尽量使用扩展索引,不要总是新建索引。
联合索引
有时候,我们需要使用多个字段作为索引,即联合索引。联合索引采用左缀优先匹配的原则,必须按从左到右顺序使用。在创建联合索引就要考虑该情况,尽量将查询字段需求高的放在前面。

MySQL事务

事务的概念
事物是一个不可分割的数据库操作序列,在逻辑上要么执行一组操作,要么在执行中触发回滚机制,一个也不执行。事物有以下四个特点:
(1)原子性:最小的执行单位,不可分割。
(2)一致性:事物执行后,整个数据的完整保持稳定。
(3)隔离性:每个事物相互隔离(在每个事务眼里,其他事务不能同时执行)。
(4)永久性:事务执行后,数据会永久改变。
事务的隔离级别
由于事务的隔离性,存在不同的隔离级别,用以解决脏读(读取另一未提交的事务数据),不可重复读(事务两次读取,中间执行了事务,得到不同结果),幻读(事务查询时,发现得到了已经删除或者改变的数据)的情况。
在这里插入图片描述

注意:一般MySQL默认采用repeatable-read隔离级别,Oracle默认采用read-commited隔离级别。

MySQL锁机制

锁机制简介
在处理并发事务时,可能会产生数据的不一致,需要采用锁机制来保证访问的次序。锁机制与隔离级别关系密切。
锁的分类
按照锁的粒度分,可以将锁分为以下种类:
(1)行级锁:只对当前行数据进行加锁。InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。
(2)表级锁:对整张表进行加锁。MyISAM采用表级锁(table-level locking)。
(3)页级锁:介于上面两者之间。
按照锁的类别来分,可以分为以下种类:
(1)读锁(共享锁):对数据读取时,施加读锁。
(2)写锁(排他锁):对数据写入时,施加写锁,只能存在一个写锁。写入数据会自动调用写锁。
乐观锁与悲观锁
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。
注意:读多建议多采用乐观锁,写多建议采用悲观锁。
死锁
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
解决方法:
(1)事务尽量一次锁定需要的所有资源。
死锁*
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
解决方法:
(1)事务尽量一次锁定需要的所有资源。
(2)升级锁级颗粒度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值