周总结9
MySQL数据库
数据库的分类
为了统一路径,统一操作方式,统一数据格式
1.关系型数据库
MySQL 开源免费
mariaDB 与Mysql一个作者,免费
Sqlist 小型数据库用于本地测试
pstgreSQL 免费 支持二次开发DIY
Oracle 收费 安全性高
2.非关系型数据库
mongoDB 文档型数据库
redis 最火 使用频率高 缓存数据库
memcache
基本使用
给bin目录添加到环境变量里
打开电脑服务
打开cmd命令窗口 用管理员身份 安装mysql服务
mysqld --install
启动服务net start mysql
修改密码
mysqladmin -u用户名 -p旧密码 password 新密码
登录后修改当前登录密码
set password = password('新密码')
字符编码
mysql 5.6之前的版本是需要我们手动修改底层编码的。
utf8mb4 我们可以在配置文件中进行永久修改
此编码功能强大 并能保存表情
基本语句
库的增删改查
create database 库名;
show databases; # 查询所有
show create database 库名; #查询单个
alter database 库名 charset='utf8' # 修改库的编码
drop database 库名; # 删除库
表的增删改查
use 库名; # 进入库
1. 创建表
create table 表名(字段名1 字段类型,字段名2 字段类型)
2. 查询表
show tables; # 查询所有表
show create table 表名; # 查询指定表信息
desc 表名; # 查询表结构
跨库查询表
dese 库名.表名;
3.编辑表
alter table 表名 rename 新表名; # 修改表名
4.删除表
drop table 表名;
记录的增删改查
1.插入数据
insert into 表名 values(数据值1,数据值2);
2.查询数据
select * from 表名; # 查询表中所有数据
select name from 表名; # 指定姓名
3.编辑数据
update 表名 set 字段名=新数据 where 筛选条件;
4.删除数据
delete from 表名;
delete from 表名 where id=1
数据库引擎
查看常见的存储引擎的代码: show engines;
innoDB 5.5版本之后默认的引擎
支持事物,行锁,外键
MyIASM 5.5之前版本的默认引擎
存取速度快
Memory 基于内存存取数据
Blackhole 黑洞
创建表的完整语法
create table 表名(
字段 字段类型(数字) 约束条件)
Mysql字段类型
整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes
浮点
float (存储位数,小数点后位数)
double (存储位数,小数点后位数)
decimal (存储位数,小数点后位数)
精度不同
decimal > double > float
字符类型
char 定长 # 超出报错,不够空格填充
varchar 变成 # 超出报错 不够有几个存几个
枚举与集合
enum 多选一
set 多选多
日期类型
datetime 年月日时分秒
date 年月日
time 时分秒
year 年
MySQL约束条件
无符号
取消正负符 unsigned
零填充
zerofill
非空
not null 输入的值不能为空
默认值
default 设置默认值
不传默认使用默认值
唯一值
unique 单列唯一
多列唯一 多个字段类型后+unique
主键
primary key
单从约束条件上说是 非空+唯一
innoDB 存储引擎默认一张表必须有一个主键
主键是组织数据的重要条件,并可以提高数据查询的速度
如果没有指定主键 会采用一个隐藏字段设为主键,隐藏字段我们不能使用 降低了数据查询的速度
如果有非空且唯一字段,会自动从上到下把第一个非空且唯一的字段升级成主键
自增
auto_increment
我们指点的字段数值自增
该约束条件配合主键一起使用,不能单独出现。一张表只能出现一次
自增不会随着数据的删除而后退,只会从原来的地方开始自增。
如果想重置某张表的主键值 可以使用
truncate t1; 清空表数据并重置主键
等于格式化了这个表数据全没了
外键
外键字段就是用来记录表与表之间的数据的关系
# 关系种类
1、一对多
2、多对多
3、一对一
4、没有关系
"""
关系的判断四字口诀: 换位思考
"""
考虑:
当我们在建立表时 关联表里有被关联表的主键编号,此时我们在创建的时候就会报错因为含有不存在的数据,因此我们在建立外键字段的时候要遵循:
1.创建表的时候一定要先创建被关联表(没有外键字段的表)
2.录入表数据时一定要先录录被关联表(没有外键字段的表)
# 创建外键的语法
就是 主键+自增
primary key auto_increment
MySQL查询关键字
select 与from
select 指定字段查询
from 指定表查询
where筛选
获取指定条件的数据
select * from 表名 where 条件;
可以模糊查询 like
%: 匹配任意个数的任意字符
_:匹配单个个数的任意字符
group by 分组
按照字段分组 方便我们查询数据
# 为什么需要分组
分组的好处在于可以快速统计出某些数据
eg:最大薪资 平均年龄 最小年龄 总人数
聚合函数 进行分组后的数据处理
max 最大值
min 最小值
avg 平均值
sum 求和
count 计数
select * from 表名 group by 要分组的字段名;
having 过滤
用来对数据筛查,与where本质是一样的。
where 使用在分组前 having 用在分组后
select * from 表名 where 条件 group by 分组的字段名 having 过滤条件;
distinct去重
数据必须一模一样才能进行去重,
多个字段针对 多个字段的数据组合结果
select distinct 去重的字段名 from 表名;
order by 排序
# 排序关键字
order by... asc --- 升序(默认为升序,要升序就不用写)
order by... desc --- 降序(从大到小)
limit分页
数据特别大的表 可以使用limit 分页进行限制数据展示
select * from 表名 limit 展示数据的条数;
select * from 表名 limit 从第几条数据开始,展示的条数;
regexp 正则表达式
我们可以不适用模糊查询,直接使用正则查询
使用正则查找名称为J开头 结尾是N或者Y
select * from emp where name regexp '^j.*(n|y)$';
多表查询思路
select * from emp,dep;
会将两张表数据对应一遍 拼在一起 称为'笛卡尔积'
但是 他把每一个人对应了所有的部门数据,不合理
应该将有关系的对应到一起才合理
如果我们需要查两张表联合在一起的数据但是两张表的字段可能会起冲突,那么我们只需在 字段名前面加上表名.来指定该字段。
select * from emp,dep where emp.dep_id = dep.id;
我们使用筛选 emp的字段dep_id的值与 dep表的id相同 展示。