MySQL

字符编码与配置文件

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

由于5.6版本编码不统一,会造成乱码我们需要将其修改为统一的编码如:utf8

windows下 MySQL默认的配置文件名:my-default.ini

  1. 拷贝mysql中的my-default.ini并重新命名为my.ini 将其内容全部清除。

  2. 拷贝字符编码相关的配置(百度查找)粘贴到my.ini中

    代码如下:

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

    以下代码可以写也可以不写,这边在配置文件中写入账号密码

    是为了之后可以直接输入mysql就可以登录

    不需要再输入账号密码即可登录的一个偷懒小技巧。

    ​ user=‘root’(账号)

    ​ password=‘123’(密码)

  3. 重启服务端即可生效,只要涉及到mysqld相关的配置修改必须要重新启动服务端才可以生效。

存储引擎

存储引擎可以简单的理解为就是针对相同的数据采用的不同存取策略。

show engines (查看所有的存储引擎)

以下简单的介绍几个。

  1. MyISAM

    MyISAM 5.5及之前版本默认的存储引擎,存取数据的速度快,但是功能较少,安全性较低。

  2. InnoDB

    InnoDB 5.5版本之后的默认存储引擎,存取数据的速度没有MyISAM快。

    但是支持事务、行锁、外键等诸多功能,安全性较高。

  3. Memory

    Memory基于内存的存储引擎,存取速度非常的快,但是断电数据立刻丢失。

  4. BlackHole

    黑洞 任何写进去的数据都会立刻丢失,类似于垃圾站。

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

  • 修改存储引擎。

    create table t2(id int)engine=innodb;

    create table t3 (id int) engine=myisam;

    create table t4 (id int) engine=memory;

    create table t4 (id int) engine=blackhole;

    • InnoDB

      .from 表结构

      .ibd 表数据、表索引(加快数据查询)

    • MyISAM

      .frm 表结构

      .MYD 表数据

      .MYI 表索引(加快数据查询)

    • Memory

      .frm 表结构

    • BlackHole

      .frm 表结构

创建表的完整语法

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

字段名和字段类型是必须要写的,至少要写一个。

数据跟约束条件是可选择的(可以写也可以不写)。

约束条件可以写多个也可以写单个,空格隔开即可。

最后一个字段的结尾千万不能加逗号。

字段类型之整型

类型 存储量 有负数 没负数
tinyint 1bytes -128~127 0~255
smllint 2bytes -32768~32767 0~65535
int 4bytes -2147483648~2147483647 0~4294967295
bigint 8bytes ...... ......
  1. 验证整型是否自带负号

    create table t6 (id tinyint);

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

    验证得知,发现填入数据超出类型存储量范围后自动填写俩个边界。

    数据失真,没有实际意义 上述所有的整型类型默认都会带有负号。

  2. 自定义移除负号

    unsigned 约束条件之一,加上后表示不需要负号

    使用约束条件来限制负号

    create table t7(id tinyint unsigned);

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

    结果也是自动默认填写为0-255

  3. 其它修改方式

    插入数据值超出范围,不应该让其插入并自动修改没有意义

    数据库应该直接报错,这个特性其实是有的在我们修改默认配置文件的时候被删除掉了。

    命令临时修改

    set session sql_mode=‘strict_trans_tables’只针对当前客户端有效。

    set global sql_mode='strict_trans_tables' 服务端重启,永久有效。

    添加到配置文件

    将sql_mode='STRICT_TRANS_TABLES'添加到my.ini文件中的[mysql]内部重启服务端即可。

    [mysql]

    sql_mode='STRICT_TRANS_TABLES'

字段类型之浮点型

float、double、decimal 三者都可以存储浮点型数据,但各自的精确度不一致

使用方式

括号内第一个数表示总共存储多少位,第二个数表示小数占多少位。

float(255,30)、double(255,30)、decimal(65,30)

验证精确度问题

create table t10(id float);

create table t11(id doube);

create table t12(id decimal);

insert into t10 values(1.11111111111111111111);

insert into t11 values(1.11111111111111111111);

insert into t12 values(1.1111111111111111111);

float<double<decimal

一般情况下float足够使用了,如果想要追求完美的精确度可以使用字符串来代替。

字段类型之字符类型

  • char 定长

    char(4)

    最大只能存储四个字符,如果超出范围则直接报错

    如果不超出范围,则用空格来填充四个字符。

  • varchar 变长

    varchar(4)

    最大只能存储四个字符,如果超过范围则直接报错

    如果没有超过,则有几位就存几位

  • 验证俩者的区别

    create table t14(id int, name char(4));

    create table t15(id int,name varchar(4));

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

      如果没有报错那就需要看下sql_mode='strict_trans_tables'

    2. 验证定长和变长的特性

      char_length() :括号内填入需要统计的字段名,统计字段数据的长度

      默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格将其补齐。

      如果想取消改机制需要使用到set global sql_mode

      set global sql_mode='strict_trans_tables','pad_char_to_full_length';

      上述因为使用的是替换不是新增,所以之前的配置也要写上去。

    3. char 与varchar比较

      char :整取整存,速度快。但浪费存储空间

      比如char(4)底层在存储数据的时候是根据括号内的数据来存储的每个数据的 读取也是根据括号内的数字来整取整存,速度快。

      varchar:节省存储空间,存取速度较慢于char

      varchar(4)底层在存储数据的时候都需要操作抱头需要先制作报头然后根据报头来区分数据的大小读取数据。较为消耗时间 速度慢。

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

数字的含义

字段后括号内的数字大部分情况下都是用来限制字段的存储长度,整型除外。

在整型里面不是用来限制存储的长度,而是用来展示长度。

create table t14 (id int(3) zerofill);

zerofill约束条件其中之一,上述表示如果上述位数不够3位则用0填充如故超了则只展示3位。

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

列如快递单号:00000022565、00054646162

字段类型之枚举与集合

枚举:多选一

create table t16(id int,name vaechar(32),gender enum(‘male’,‘run’,‘musicaaa‘))

枚举表示录入gender数据的时候必须要在enum后面括号内选择一个写入,不遵循则会报错。限制了录入数据。

集合:多选多

create table t17(id int,name varchar(32),hobbies set('read','run','music'));

集合表示 录入hobbies数据的时候必须要在set后面括号内选择一个或者多个,不遵循则会报错。

字段类型之日期类型

data 年月日、datatime 年月日时分秒、time 时分秒、year 年份。

create table t17(
	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 表名 values() 默认按照创建表的字段顺序添加

    insert into 表名(字段名)vlaues 可以自定义字段顺序

  • 基本使用

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

  1. unsigned 无负号

    ​ id int unsigned

  2. zerofill 零填充

    id int zerofill

  3. not null 非空

    name varchar(32)not null

  4. default 默认值

    name varchar(32)defaulf 'jason'

  5. unique 唯一值

    id int unique 单列唯一 限制某个字段名里数据不能重复

  6. host varchar(32)

    port int

    unique(host,port) 联合唯一 限制括号内俩个字段的数据组合起来不能重复。

posted @ 2022-08-15 21:21  瓮小辉  阅读(27)  评论(0)    收藏  举报