数据库演变史 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基本数据类型 整型 浮点型 字符类型 时间类型 枚举与集合类型
# 增 create database 数据库名称; # 查 show databases; # 查所有 show create database 数据库名称; # 查单个 # 改 alter database 数据库名称 charset='编码'; # 修改编码 # 删 drop database 数据库名称; # 删除数据库
""" 1.查看当前所在库名称 select database(); 2.切换数据库 use 数据库名称; """ # 增 create table 表名(字段名称 字段类型) # 创建表一定要给字段 # 查 show tables; # 查看当前库下面所有的表名称 show create table 表名; # 查看指定表的详细信息(创建语句) describe 表名; # 可以简写desc # 改 alter table 表名 rename 新表名; # 删 drop table 表名;
""" 操作记录之前肯定得先有库和表 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);
create table 表名( 字段名1 字段类型(数字) 约束条件, 字段名2 字段类型(数字) 约束条件, 字段名3 字段类型(数字) 约束条件 ); # 注意事项 1.字段名和字段类型是必须的 数字和约束条件是可选 2.约束条件可以有多个 3.最后一个字段结尾不能有逗号(不容易发现)
# 整型 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); # 浮点型 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 具体使用结合实际情况 ''' # 字符类型 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');
# 1.模糊查询 show variables like '%mode%'; # 2.修改修改 set session set global 直接修改配置文件 sql_mode = 'strict_trans_tables'
# 验证数字在数字类型中是否是用来限制存储长度 create table t13(id int(3)); insert into t13 values(111111); '''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度''' create table t14(id int(8) unsigned zerofill); insert into t14 values(1111); insert into t14 values(111111111); 结论:以后遇到数字类型不要指定数字 让他使用自带的即可 create table t15(id int);
# 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() 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