数据库基本SQL语句+存储引擎+MySQL基本数据类型

昨日内容回顾

数据库演变史

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语句之库操作

# 增
    create database 数据库名称;
# 查
    show databases;  # 查所有
    show create database 数据库名称;  # 查单个
# 改
    alter database 数据库名称 charset='编码';  # 修改编码
# 删
    drop database 数据库名称;  # 删除数据库

 

数据库基本SQL语句+存储引擎+MySQL基本数据类型

 

 

数据库基本SQL语句+存储引擎+MySQL基本数据类型

 

 数据库基本SQL语句+存储引擎+MySQL基本数据类型

 

 

数据库基本SQL语句+存储引擎+MySQL基本数据类型

 

 

基本SQL语句之表操作

"""
1.查看当前所在库名称
    select database();
2.切换数据库
    use 数据库名称;
"""
# 增  
    create table 表名(字段名称 字段类型)  # 创建表一定要给字段
# 查
    show tables;  # 查看当前库下面所有的表名称
    show create table 表名;  # 查看指定表的详细信息(创建语句)
    describe 表名;  # 可以简写desc 
# 改
    alter table 表名 rename 新表名;
# 删
    drop table 表名;

 


数据库基本SQL语句+存储引擎+MySQL基本数据类型

 

 



 

基本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);

 

创建表的完整语法

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');

 

SQL_MODE

# 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);

 

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()
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 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:MySQL学习之关联、子查询优化、排序查询优化


下一篇:强化学习中的对抗攻击