什么是mysql语句?
mysql语句分为两种第一种是DML语句包括增删该,第二种是DQL语句即查询语句
什么是dml语句?
数据库操作语言,用来操作数据库表中的记录,如增删改等
1.增加
insert into t_user values ......
t_user:为添加的表名
values:为表后面增加的索引的值
2.删除
delete from t_user where .....
后面where判定为条件语句会删除满足该条件的数据,当没有条件时会删除整个表
3.修改
update t_user set t_name='小明' where .......
set后面跟的值为该表需要修改为什么的值
什么是DQL语句?
数据查询语言
,主要是对数据进行查询操作。常用关键字有 SELECT、FROM、WHERE 等。
1.常见的DQL语句关键字执行的先后顺序
from>where>group by>select>having>order by>limit
from:先是执行来自哪个表
where:条件
group by:按照什么分组
select:映射出结果
having:对映射出来的的结果又按照什么条件执行
order by:按照什么排序
limit:显示映射的结果的数据条数
2.通配符
like ‘%xx%’;
%:任意的字符
xx:标识匹配的元素或字符
当数据量较大时查询不会使用like语句这样全文匹配会导致性能降低,一般在数据量较大时采用的模糊匹配一般会使用fulltext索引的全文匹配运用MACTH函数等
什么是事务
MySQL 事务具有四个特性:原子性、一致性、隔离性、持久性,这四个特性简称 ACID 特性
一、原子性(Atomicity ):一个事务是一个不可再分割的整体,要么全部成功,要么全部失败
事务在数据库中就是一个基本的工作单位,事务中包含的逻辑操作(SQL 语句),只有两种情况:成功和失败。事务的原子性其实指的就是这个逻辑操作过程具有原子性,不会出现有的逻辑操作成功,有的逻辑操作失败这种情况
二、一致性(Consistency ):一个事务可以让数据从一种一致状态切换到另一种一致性状态
举例说明:张三给李四转账 100 元,那么张三的余额应减少 100 元,李四的余额应增加 100 元,张三的余额减少和李四的余额增加这是两个逻辑操作具有一致性
三、隔离性(Isolution ):一个事务不受其他事务的影响,并且多个事务彼此隔离
一个事务内部的操作及使用的数据,对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰
四、持久性(Durability ):一个事务一旦被提交,在数据库中的改变就是永久的,提交后就不能再回滚
一个事务被提交后,在数据库中的改变就是永久的,即使系统崩溃重新启动数据库数据也不会发生改变
2. MySQL 事务的并发问题
上面讲到了事务的隔离性,当有多个任务时,应当让多个事务同时执行,这就是事务的并发。既然事务存在并发执行,那必然存在两个事务操作同一个数据的冲突问题,那么我们来看一下会出现哪些问题
下面介绍脏读、不可重复读、幻读时会涉及到事务隔离级别,可先略过。按照提示设置事务隔离级别即可,本文后面会介绍事务隔离级别。测试这几个事务并发问题可以通过打开两个终端窗口进行测试
查看事务隔离级别
一、脏读
测试脏读: 将事务隔离级别修改为读未提交
脏读: 在一个事务里面,由于其他事务修改了数据并且没有提交,而导致前后两次读取的数据不一致的情况,这种事务并发问题称之为 “脏读”
二、不可重复读
测试不可重复读: 将事务隔离级别修改为读已提交
不可重复读: 一个事务读取到其他事务已提交的数据导致前后两次读取数据不一样的情况
三、幻读
测试可重复读: 将事务隔离级别修改为可重复读
幻读: 一个事务前后两次读取的数据不一致,是因为其他事务插入数据导致的事务并发情况
MySQL 事务有四种隔离级别,如下所示,表格中的 “是” 代表存在这个问题,“否” 代表没有这个问题
隔离级别 脏读 不可重复读 幻读
Read uncommitted(读未提交) 是 是 是
Read committed(读已提交) 否 是 是
Repeatable read(可重复读,默认的隔离级别) 否 否 是
Serializable(可串行化) 否 否 否
读未提交
set session transaction isolation level read uncommitted;
读已提交
set session transaction isolation level read committed;
可重复读(默认隔离级别)
set session transaction isolation level repeatable read;
可串行化
set session transaction isolation level serializable;