昨日内容回顾
数据库演变史
1.纯文件阶段
2.规定文件夹
3.单机游戏
4.联网游戏
# 数据库就是一款帮助我们管理数据的程序
软件开发架构及数据库本质
cs架构与bs架构
其实数据库本质就是一款cs架构的软件
数据库的分类
1.关系型数据库
# 固定的表结构
MySQL、MariaDB、PostgreSQL、Oracle、db2、sqlite、sqlserver
2.非关系型数据库
# 没有固定的表结构
redis、mongodb、memcache
数据库下载与安装
数据库版本问题 5.5 5.6 5.7 8.0
直接访问官网找到对应的版本下载压缩包即可
系统服务制作
1.环境变量
2.以管理员的身份添加系统服务
mysqld --install
3.第一次需要自己启动
net start mysql
"""
停止服务
net stop mysql
移除服务
mysqld --remove
"""
基本操作命令
1.游客模式
mysql
2.特定身份 # MySQL默认端口号3306
mysql -u用户名 -p密码 -hIP地址 -P端口
3.查看所有的数据库名称
show databases;
4.取消之前的命令
\c
5.退出
exit、quit
密码相关操作
# 修改密码的两种方式
mysqladmin -u用户名 -p原密码 -password 新密码
set password=PASSWORD('新密码')
# 忘记密码操作
停止正常的mysql服务 然后以跳过授权表的方式重新启动
net stop mysql
mysqld --skip-grant-tables
以管理员身份登录修改指定表中的用户数据
update ...
配置文件
# 查看主要信息
\s
# 配置文件
mysql默认的配置文件是my-default.ini
拷贝一份并重命名修改my.ini
[mysqld]
[client]
[mysql]
主要概念
库 文件夹
表 文件夹里面的文件
记录 文件夹里面的文件里面的一行行数据
目录
基本SQL语句
针对库 针对表 针对记录
存储引擎
MySQL基本数据类型
整型 浮点型 字符类型 时间类型 枚举与集合类型
一、基本SQL语句
1.基本SQL语句之库操作
# 增
create database 数据库名称;
# 查
show databases; # 查所有
show create database 数据库名称; # 查单个
# 改
alter database 数据库名称 charset='编码'; # 修改编码
# 删
drop database 数据库名称; # 删除数据库
2.基本SQL语句之表操作
"""
1.查看当前所在库名称
select database();
2.切换数据库
use 数据库名称;
"""
# 增
create table 表名(字段名称 字段类型) # 创建表一定要给字段
# 查
show tables; # 查看当前库下面所有的表名称
show create table 表名; # 查看指定表的详细信息(创建语句)
describe 表名; # 可以简写desc
# 改
alter table 表名 rename 新表名;
# 删
drop table 表名;
3.基本SQL语句之记录操作
"""
操作记录之前肯定得先有库和表
create database db1;
use db1;
create table t1(id int,name varchar(32));
"""
# 增
insert into 表名 values('按照字段顺序一一传值(逗号隔开)');
insert into 表名 values(...),(...),(...);
# 查
select * from 表名; # 查询所有字段数据
select 字段名1,字段名2 from 表名; # 也可以通过库名.表名跨库
'''如果字段过多导致展示错乱 还可以使用\G结尾分行展示'''
# 改
update 表名 set 字段名=新值 where 字段名=存在的值 # where筛选条件
# 删
delete from 表名 where 字段名=存在的值 # where筛选条件
二、存储引擎
"""
简单的理解为:存储引擎就是处理数据底层逻辑 不同的引擎底层处理方式有所不同
"""
# 如何查看存储引擎信息
show engines;
# 需要掌握的有四个
MyISAM
是MySQL5.5版本之前默认的存储引擎
该引擎存取数据的速度都很快
但是安全性较低 不支持很多额外的功能
InnoDB
是MySQL5.5版本之后默认的存储引擎
该引擎支持事务、行级锁、外键
存取数据的速度没有MyISAM快但是功能和安全性更高
memory
数据全部存储在内存中 速度很快但是断电立刻丢失
blackhole
黑洞 任何放入其中的数据都会消失(类似于垃圾处理站)
# 比较存储引擎之间的差异
'''创建表可以指定存储引擎
create table t1(id int) engine=存储引擎;
'''
create table t2(id int) engine=MyISAM;
create table t3(id int) engine=InnoDB;
create table t4(id int) engine=memory;
create table t5(id int) engine=blackhole;
# 不同存储引擎文件后缀名
MyISAM
三个文件
.frm 表结构
.MYD 表数据
.MYI 表索引
InnoDB
两个文件
.frm 表结构
.ibd 数据与索引
memory
.frm 表结构
blackhole
.frm 表结构
# 插入数据演示
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
insert into t5 values(1);
重新打开cmd 重启服务,net stop mysql ,net start mysql ;use db2;
三、创建表的完整语法
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
);
# 注意事项
1.字段名和字段类型是必须的 数字和约束条件是可选
2.约束条件可以有多个
3.最后一个字段结尾不能有逗号(不容易发现)
四、数据类型
1.整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes
'''不同类型的int能够存储的数字范围不一样'''
# 验证不同类型的int是否会空出一个存储正负号
create table t6(id tinyint);
insert into t6 values(256),(-129);
# 得出结论:tinyint默认就会空出一位存储正负号
"""其实所有的int类型默认都是空出一位存储正负号"""
create table t7(id tinyint unsigned);
insert into t7 values(256),(-129);
2. 浮点型
float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.1111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);
'''三者精确度不同
decimal > double > float
具体使用结合实际情况
'''
3.字符类型
char(4) # 定长
最多存储四个字符 超出了则报错 没超出则用空格填充
varchar(4) # 变长
最多存储四个字符 超出了则报错 没超出有几个存几个
create table t11(id int,name char(4));
create table t12(id int,name varchar(4));
insert into t11 values(1,'jason');
insert into t12 values(1,'jason');
4.日期相关类型
date 年月日
datetime 年月日时分秒
time 时分秒
year 年
create table user(
id int comment '编号',
name varchar(255) comment '姓名',
reg_time datetime comment '注册时间',
birthday date comment '生日',
study_time time comment '学习时间',
born_year year comment '年份'
);
"""
字段也可以加类似于注释的说明
comment
"""
# 此处先人工智能模拟
insert into user values(1,'jason','2000-11-11 11:11:11','2000-11-11','11:11:11','2000');
5.枚举与集合类型
# 枚举
多选一
'''提前定义好数据之后 后续录入只能录定义好的内容之一'''
create table t1(
id int,
name char(6),
gender enum('male','female','others')
);
insert into t1 values(1,'jason','male'); # 正常
insert into t1 values(2,'kevin','男'); # 报错
# 集合
多选多(包含多选一)
create table t2(
id int,
name char(6),
hobbies set('basketball','football','doublecolorball')
);
insert into t2 values(1,'jason','basketball');
insert into t2 values(2,'kevin','football,doublecolorball');
insert into t2 values(3,'jkson','pingpongball');
整型
浮点型
字符类型
此时需要修改SQL_MODE,修改配置如下
SQL_MODE
# 1.模糊查询
show variables like '%mode%';
# 2.修改修改
set session
set global
直接修改配置文件
sql_mode = 'strict_trans_tables'
五、研究数字在数字类型与字符类型中的区别
# 验证数字在数字类型中是否是用来限制存储长度(int最多存储10位)
create table t14(id int(3));
insert into t14 values(111111);
'''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度'''
create table t15(id int(8) unsigned zerofill);
insert into t15 values(1111);
insert into t15 values(111111111);
结论:以后遇到数字类型不要指定数字 让他使用自带的即可
create table t15(id int);
六、char与varchar差异
# 1.验证char定长特性
create table t16(id int,name char(5));
insert into t16 values(1,'tom');
create table t17(id int,name varchar(5));
insert into t17 values(1,'tom');
1.统计某个字段数据对应的长度
char_length()
select char_length(name) from t16;
2.上述方法还是无法验证 需要先取消底层优化操作
set global sql_mode='strict_trans_tables,pad_char_to_full_length'
# 2.到底哪个好
char
优势:整存整取 速度快
劣势:浪费存储空间
varchar
优势:节省存储空间
劣势:存取数据的时候都需要先考虑报头 速度较于char慢
char(6) varchar(6)
1bytes+jason1bytes+tony1bytes+jack1bytes+kevin
退出exit,重新cmd进入mysql