MySQL——配置文件及字段类型

MySQL

目录

  • 字符编码与配置文件
  • 数据库存储引擎
  • 创建表的完整语法
  • MySQL字段类型
  • MySQL字段约束

字符编码与配置文件

  • 查看数据库基本信息(用户、字符编码)

    需要查看数据库基本信息时在cmd中 使用 **\s ** 查看

  • 在windows,mac 下MySQL默认的配置文件

    系统 配置文件 文件路径
    windows my.ini 安装目录的根目录 my-default.ini
    拷贝上述文件并且重命名为my.ini
    mac my.cnf 拷贝my-medim.cnf 文件
    /usr/local/mysql/support-files/. 粘贴到以下目录下
    /etc. 并且重命名为my.cnf, 修改 my.cnf 即可进行定制
    Linux my.cnf 文件位于/etc/my.cnf
    可以查找下:find / -name my.cnf
  • 在MySQL 5.6 版本中编码不统一 会造成乱码的解决方式

    ​ 统一修改>>>:utf8或utf8mb4

    ​ utf8mb4比utf8更强大,还能识别表情包

    添加字符编码相关的配置(百度查看即可)
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    注意如果配置文件涉及到了mysqld相关的配置修改 那么需要重启服务端才可以生效

    ps:偷懒操作 在配置文件中的mysql下提前写好用户名和密码 之后直接mysql登录

存储引擎

存储引擎就是针对相同的数据采用的不同的存取策略

  • 查看所有的存储引擎

    在mysql下 show engines 可查看所有的存储引擎

  • 需要掌握的存储引擎

    存储引擎 具体体现 优缺点
    MyISAM MySQL5.5及之前版本默认的存储引擎 功能较少 安全性较低
    InnoDB MySQL5.5之后版本默认的存储引擎 存取数据的速度没有MyISAM快
    但支持事务、行锁、外键等诸多功能
    Memory 基于内存的存储引擎 存取数据极快 但是断电立刻丢失
    BlackHole 黑洞引擎 任何写进去的数据都会立刻丢失

    MySQL中默认是大小写不敏感的(忽略大小写)

  • 不同存储引擎之间底层文件的区别

    创建表 所产生的文件 含义
    create table t1(id int) engine=innodb; .frm
    .ibd
    表结构
    表数据、表索引
    create table t2(id int) engine=myisam; .frm
    .MYD
    .MYI
    表结构
    表数据
    表索引(加快数据查询)
    create table t3(id int) engine=memory; .frm 表结构
    create table t4(id int) engine=blackhole; .frm 表结构

    ​ windows cmd终端鼠标右键的意思就是粘贴

创建表的完整语法

  • 语法

    create table 表名(
    字段名1 字段类型(数字) 约束条件,
    字段名2 字段类型(数字) 约束条件,
    字段名3 字段类型(数字) 约束条件
    )engine=存储引擎;

  • 创建表的注意事项

    1.字段名和字段类型是必须的(至少写一个)
    2.数字跟约束条件是可选的(可有可无)
    3.约束条件可以写多个 空格隔开即可
    4.最后一个字段的结尾千万不能加逗号

字段类型

  • 字段类型——整型

    1. MySQL中的整型

      整型类型 范围 有负号 无负号
      tinyint 1bytes(8个字节) -128~127 0~255
      smallint 2bytes(16个字节) -215~215-1 0~2^16-1
      int 4bytes(32个字节) -231~231-1 0~2^32-1
      bigint 8bytes(64个字节) -263~263-1 0~2^64-1
    2. 验证整型是否自带负号

      create table t5(id tinyint);

      insert into t5 values(-129),(256);

      ps:发现自动填写为两个边界值 数据失真 没有实际意义
      上述所有的整型类型默认都会带有负号

    3. 定义移除负号

      unsigned 约束条件之一 意思是不需要负号

      create table t7(id tinyint unsigned);
      insert into t7 values(-129),(256);

    4. 插入数据值超出数据类型范围自动修改的原因,如何解决

      原因:由于在之前配置文件my.ini中缺少了sql_mode='STRICT_TRANS_TABLES'

      造成了数据的判断失误。

      解决办法:

      1. 命令临时修改

        set session sql_mode='strict_trans_tables' 当前客户端操作界面有效
        set global sql_mode='STRICT_TRANS_TABLES' 服务端不重启永久有效

      2. 配置文件永久修改

        在配置文件my.ini中添加sql_mode='STRICT_TRANS_TABLES'

        [mysqld]
        sql_mode='STRICT_TRANS_TABLES'

  • 字段类型——浮点型

    1. MySQL中的浮点型

      浮点型类型 使用方式 创建表 精确度
      float float(255,30) create table t8(id float(255,30)); 小数点后七位
      double double(255,30) create table t9(id double(255,30)); 小数点后15位
      decimal decimal(65,30) create table t10(id decimal(65,30)); 小数点后29位

      ​ 三者都可以存储浮点型数据 但是各自的精确度不一致

    2. 精确度的前后顺序:

      ​ float < double < decimal

    3. 浮点型的使用情况

      ​ 一般情况下float足够使用了

      如果想追求非常完美的精确度 可以使用字符串来代替

  • 字段类型——字符类型

    1. MySQL中的字符类型

      字符类型 特点(别名) 作用
      char(字符数) 定长 最大存储()个字符,若超过范围直接报错
      如果不超出范围 则用空格填充至()个字符
      varchar(字符数) 变长 最大存储()个字符 若超过范围则直接报错
      如果不超出范围 则有几位就存几位
    2. 两则的区别

      1.结果验证,超出范围两者都会报错

      ​ 注意: sql_mode='strict_trans_tables' 需要设置上

      2.验证定长和变长特性

      ​ char_length() 统计字段数据的长度

    3. 二者的优缺点

      字符类型 优势 劣势 存取操作
      char 整存整取速度快 浪费存储空间 直接输入所需存储数据
      varchar 节省存储空间 存取速度慢于char 存取数据都需要操作报头(耗时)

      用varchar存取时的报头: 1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili

      两者使用频率都很高 现在默认很多时候是varchar

    4. char存取时的弊端

      默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格
      然后在读取的时候又会自动将填充的空格移除 如果想取消该机制 需要sql_mode
      set global sql_mode='strict_trans_tables,pad_char_to_full_length';
      上述目录是替换 不是新增 所以之前的配置也要写上

  • 字段类型中数字的含义

    ​ 数字大部分情况下都是用来限制字段的存储长度 但是整型除外!!!

    ​ 数字不是用来限制存储的长度 而是展示的长度

    ​ 在mysql 中创建表 create table t1(id int(3) zerofill);

    ​ int(3) 的含义 :展示三位,超过的有多少展示多少位

    ​ zerofill 的含义 : 不足三位的前面用0补充

    以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数

  • 字段类型——枚举与集合

    1. 枚举与集合

      字段类型 使用场景 举例
      枚举 多选一 性别(男 女 )
      集合 一选多 爱好(唱 跳 rap)
    2. 实例

      在cmd中的枚举

      create table t1(
      	id int,
       	name varchar(32),
      	gender enum('male','female','others')
      );
      

      在cmd中的集合

      create table t2(
      	id int,
      	name varchar(32),
      	hobbies set('read','run','music','rap')
      );
      
  • 字段类型——日期类型

    1. MySQL中的日期类型

      日期类型 含义
      data 年月日
      datetime 年月日时分秒
      time 时分秒
      year
    2. 日期类型的实例

      create table t1(
      	id int,
      	name varchar(32),
       	birth date,
        	reg_time datetime,
       	study_time time,
       	join_time year
      );
      insert into t17 values(1,'jason','2022-11-11','2000-11-11 11:11:11','11:11:11','1995');
      

字段约束条件

  • 字段顺序的添加

    添加表 作用
    insert into 表名 vlaues() 默认按照创建表的字段顺序添加
    insert into 表名(字段) vlaues() 可以自定义字段顺序
  • 字段的约束

    约束条件 含义 具体实现
    unsigned 无负号 id int unsigned
    zerofill 零填充 id int zerofill
    not null 非空 name varchar(32) not null
    default 默认值 name varchar(32) default 'jason'
    unique 唯一值 id int unique 单列唯一
    unique(host,port) 联合唯一
posted @   Nirvana*  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示