数据库:提供增、删、改、查功能的存放数据的仓库。
MySQL:MySQL是一个管理数据库的软件,并不是一个数据库。
核心定义
数据库事务:作为一个单元的一组有序的数据库操作。
个人理解:为了保证数据库数据的有效性和减少因意外或者错误操作造成对数据库数据的影响,数据库操作将一系列有序的操作作为一个基本的生效单元。也就是说这一系列的操作如果全部完成才对数据库产生永久的影响,如果其中有一步出现错误或者缺失都会导致整个系列的操作无效,并且数据库会回滚到执行这一系列操作之前的状态。
举个被举烂的例子:
A给B转账,A账户扣钱,B账户加钱。转账的过程就是一个事务。二者执行有先后顺序,并且缺少任意一步都会导致银行存储账户信息的数据库出现错误的结果。因此 要等到A扣完钱,然后B的钱等量的增加了以后,转账这个动作才会提交给银行的数据库。
事务的特性
原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须完全应用到数据库,失败则不能对数据库产生影响。
这条性质理解为事务的执行结果只有两种,即 True 和False,非此即彼。不会有第三种情况存在。
一致性:事务执行前和执行后必须处于一致性状态。
一个浅显易懂的说法就是一家人打麻将,无论输赢如何,打麻将的四个人用来打麻将的钱只是在四个人内部转移而总量不增加或者减少。
隔离性:当多个用户并发访问数据库时,数据库为每个用户开启的事务不被其他的事务的操作锁干扰,多个并发事务之间要相互隔离。
当不同的用户要在同一时间访问同一条数据时,数据库会采用排队的方式来进行分配。
你在上厕所,你女朋友也要上厕所,但是它只能等你上完厕所再去。
持久性:一旦一个事务提交,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事务的操作。
就比如时间线,你做过的事情就会产生结果,并且是永远不可逆的。
事务回滚
撤销一个事务已经完成的对数据库的更新。
解释:把你抬起来准备打人的手收起来,大家就当做无事发生。。。
数据库提供的四种隔离级别
隔离性当多个线程都开启事务来操作数据库中的数据时,数据库系统要进行隔离操作来确保每个线程获取数据的准确性。
在不考虑隔离性的情况下,数据库的操作会出现各种错误和无效数据:
脏读:一个事务处理过程中读取并使用了另一个未提交的数据。
例子:
A找你借5000块钱,你现在有5000,你就答应了。然后你用了3000,等他找你拿的时候你就只剩2000了。然后他打了一顿。
不可重复读:在第一个事务中,多次读取同一个数据,在这个事务还没有结束,另一个事务也访问该统一数据,由于第二个事务对该数据的修改,导致第一个事务多次读取的数据结果可能会发生改变。即同一个事务中原始数据读取不可重复。
例子
事务一:你老婆每天都看一遍床头放的100块钱,连续一个月。
事务二:在15号那天你拿了床头的那100块钱去买了一包烟。
不可重复读:你老婆在15号那天看到100块钱变少了。
幻读:第一个事务对一个表中的全部数据进行操作,同时第二个事务也对这个表数据进行修改,并且这个修改是对表中新增或者删除了,操作第一个事务的用户发现表中的数据还没有修改的数据行。
例子:你是一个老师,你在学生考试过后再阅卷打分,你的一个学生偷偷摸摸的把一张没打分的卷子放到你改过的卷子堆里面。等你改到最后的时候突然发现。怎么有一张没改。。。哪冒出来的。
四种隔离级别
读未提交(uncommited read):最低级别,什么都有可能发生。
读已提交(commited read):不会发生脏读。
可重复读(repeatable read):不会发生脏读和不可重复读。
串行化(serializable):脏读、不可重复读、幻读都不会发生。
注:隔离级别越高读取速度越慢,MySQL默认级别是 可重复读(第三级)
数据库引擎
MySQL 5.5版本之前默认MYISM引擎(查询速度相对快,不支持事务)
5.5以后版本默认INNODB引擎(相对前者慢,支持事务)。
数据库安装(压缩包版)
1.把mysql-5.7.25-winx64.zip解压放到C盘目录下 # 自选一个跟目录,后续的C随你选择的目录改变。
2.MySQL软件bin目录添加到PATH环境变量中 C:\mysql-5.7.25-winx64\bin
3.在MySQL安装目录下创建my.cnf文件
4.my.cnf中粘贴默认选项
[mysqld]
basedir=c:/mysql-5.7.25-winx64
datadir=c:/mysql-5.7.25-winx64/data
character-set-server=utf8
explicit_defaults_for_timestamp
[mysql]
5.安装MySQL服务,以管理员运行cmd
执行切换到bin目录下,执行mysqld --install MySQL
6.查看MySQL服务 services.msc 或者计算机->管理-->服务和应用程序-->服务
7.初始化安装MySQL数据库在bin目录下执行
mysqld --initialize-insecure,无密码安装,看是否多data文件夹
8.启动MySQL服务
9.MySQL连接测试 mysql -uroot -p
select user,host,authentication_string from mysql.user;
卸载mysql
1、停止服务,删除C:mysql该目录下剩余了所有文件,把mysql文件夹也删了
2、windows+R运行“regedit”文件,打开注册表
3、删除注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
4、删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹,如果没有可以不用删除了
5、使用管理员权限进去cmd,sc delete 要删除的服务名 ,这里是MySQL