数据库
数据库优点:
数据库是按照特定的格式存储到文件中,通过SQL语句可以方便的对大量的数据进行增删改查操作,数据库是对大量的信息进行管理的高效的解决方案.
数据的存储的方式:
1.数据保存在内存中优点:内存速度快,确定:断电,程序退出就没有,价格高。
2.数据保存在普通文件优点:永久保存 缺点:查询,增加,删除比较麻烦。
3.数据保存在数据库优点:永久保存,通过SQL语句比较方便操作数据库。
DOS命令
DOS命令方式启动步骤:net stop mysql
控制台连接数据库:登录 mysql -uroot -proot
SQL通用的语法:
DDL:数据定义语言,定义database,table等等
DML:数据操作语言,增,删,改数据。
DQL:数据查询语句,查询数据的。
Select语句: Select指定查询那些列的数据. *号代表查询所有的列. From指定查询那张表. DISTINCT可选,指点显示结果,是否剔除重复数据. where子句:进行过滤查询. Like语句:%代表零个或多个任意字符_代表一个字符 Order by指定排序的列,Asc升序 Desc降序 这个语句应该位于Select语句结尾. |
1.单条件查询
- 运算符有:>, <, >=, <=, =, <>。is null 和 is not null
2.多条件查询
- 连接符有:and(且), or(或), not(不否定语句)
3.范围查询
- between 开始值 and 结束值,包含开始值和结束值。
- in(值1,值2)
4.模糊查询
- 语法:like '表达式' 在表达式里可以写
- _: 一个任意字符。
- %: 任意个任意字符。“%鲁%”查询包含鲁字的姓名
5.排序查询
- 语法:order by 排序字段 排序规则,排序字段2
- 则有:ASC:升序,从小到大 DESC:降:从大到小
6.聚合查询
- 聚合函数:用于统计的,常用的聚合函数有;
- count():统计数量
- sum();求和
- avg():求平均值
- max():求最大值
- min():求最小值
- 注意:所有的聚合函数都会忽略null值
7.分组查询
- 语法:group by 分组字段 having 分组后的过滤条件
- 注意:select后边,只能跟分组的字段,或者聚合函数
- where和having的区别:
- where在分组前执行;having在分组后执行。
- where过滤原始表的数据;having过滤分组后的数据
- where里不要写聚合函数;having里可以写聚合函数。
8.分页查询
- 语法:limit 起始索引。查询数量
9.综合查询
- 练习1:
DCL:数据控制语言,DBA使用的,管理Mysql的权限,创建用户,授权管理。
TCL:事务管理语言,管理事务的。
约束
1.主键约束
主键:一张表的唯一标识,原则上:每张表必须有主键,且只能一个主键。
- 主键约束
- null约束
- not null 约束
特点:被主键约束的字段,值必须是非空,唯一
语法:primary key
2.唯一约束
- 效果:唯一约束的字段,值不能重复,但是可以为null
- 语法:字段名 类型 unique
3.非空约束
- 效果:非空约束的字段,值不能为null
- 语法:字段名 类型 not null
4.默认值约束
- 效果:默认值约束的字段,如果不指定值,取默认值(如果指定null值。值就是null,不取默认值)
- 语法:字段名 类型 default 默认值
- null 空值 not null 非空
5.外键约束
- 效果:外键约束的字段,必须从指定表的主键中取值。
- 目的:保证数据的一致性和完整性,避免脏数据。
- 语法:
1.创建表时设置的外键:【constraint 约束名称】foreign key(主键字段) references 主表(主键)
2.已有表里设置外键:alter table 表名称 add [constraing 约束名称]foreign key(外键字段)references 主表(主键)
表关系
1.一对一关系
2.一对多
3.多对多
备份和恢复(了解)
- 备份(dos命令):musqldump -u用户名 -p密码 数据库名称>E:\lu.sql
- 恢复(sql语句):
- 登录Mysql
- 如果库不存在,就创建库;
- 使用库
- 执行SQL:source E:\lu.sql
多表查询
1.多表查询技巧:确定表,确定表之间的关联的条件,从关联条件中得到结果,进行筛选。统计,计算想要的结果。
2.内连接查询:查询必定有关联的数据。
3.外连接查询:查询一张表的全部数据,及另一张表的关联的数据。
4.子查询:查询的技巧,没有固定的语法。
范式
笛卡尔积现象
内连接
内链接的查询的效果:查询两张表之间必定有关联的数据
- 显示内链接:
select 字段 from 表1 inner join 表2 on 关联套 件 where 条件
- 隐示内链接:
- select 字段 from 表一,表二 where 关联条件 and 条件
- 外连接
- 左外连接
查询左边的全部数据,以及右边的关联的数据
select 字段 from 表一 left join 表二 on 关联条件 where 条件
- 右外连接
查询右边的全部数据,以及左表的关联数据
select 字段 from 表一 right join 表二 on 表关联条件 where 条件
- 子查询
- 是一种查询的技巧,没有固定的语法,查询嵌套.
- 子查询结果是一行一列:一个值
- 子查询结果是多行一列:一个集合
- 子查询结果是多行多列:一张虚拟表
事务(重点)
1.什么是事务 |
|
2.事务管理
- 数据准备
2.1手动提交事务管理
2.2自动提交的事务管理
- 自动提交的开关设置和查询
- 通过自动提交开关,进行事务管理
3.回滚点
- 回滚点:事务里可以回滚到指定额回滚点,二不必回滚事务里所有的操作
4.事务特性和隔离级别
4.1事务的四大特性ACIL(面试题)
|
4.2事务的隔离级别和并发问题
4.2.1事务并发问题
- 脏读:一个事务里,读取到里另一个事务未提交的数据
- 不可以重复:一个事务里,多次读取的数据不一致;受到了其他事务的update干扰
- 虚度、幻读:一个事务里,多次读取的数据数量不一致;受到了其他事务的insert,delete干扰
4.2.2事务的隔离级别
隔离级别 | 脏读 | 不可重复读 | 虚读 |
read uncommitted | ★ | ★ | ★ |
read committed | ☆ | ★ | ★ |
repeatable read | ☆ | ☆ | ★ |
serializable | ☆ | ☆ | ☆ |
4.3事务的隔离级别效果的演示
- 隔离级别的操作
4.3.1演示read uncommitted
- 开启两个连接:A(效果演示的事务)和B(干扰事务)
- 修改A的隔离级别:read uncomitted
- A和B都开启事务
- A查询tom的确定原始数据
- B修改tom的余额,但是不提交事务
- A在查询tom的余额
- 如果查询结果改变了,说明存在战脏读问题。