MySQL一周目三日

MySQL存储、语法、基本数据类型以及约束条件

1  存储引擎定义

存储引擎简而言之就是mysql内部不同的存储方式

可以通过  show engines;  来查看内部的存储引擎

 2  主要搜索引擎

2.1  InnoDB

该搜索引擎是5.5版本之后的默认搜索引擎

2.2  MyISAM

该搜索引擎是5.5版本之前的默认搜索引擎

2.3  MEMORY

数据直接存储在内存中,不会写入文件,其特点便是速度快,但是断电会立刻丢失数据

2.4  BLACKHOLE

写入的数据都会丢失

  2.1InnoDB与2.2MyISAM的优缺点

MyISAM虽然比InnoDB的运行速度快但是不支持事务外键等功能,数据的安全性能低于InnoDB

  事务  保证数据的操作要么全部成功,要么全部失败

  行所  对数据进行加锁,保证同一时间只能由一个人进行操作

  外键  建立表关系

3  存储引擎切换以及文件结构

3.1 不使用默认,引擎的切换方式

create table 表名(字段名 字段类型)engine=引擎名称;  不写engine=特定引擎名称使用默认搜索引擎

3.2 不同搜索引擎产生的文件数目不同

innoDB    产生两个文件;分别是.frm(表结构文件)和.idb(表数据、索引文件)

MyISAM  产生两个文件;分别是.frm(表结构文件)和.MYD(表数据文件)和.MYI(表索引文件)  

      #  表的结构越清晰,速度越快

memory  产生一个.frm的表结构文件,数据存放在内存,重启即消失

blackhole   产生一个.frm的表结构文件,数据不存储,直接丢弃

 4  创建标的完整语法结构

create table 表名(
    字段名 字段类型(宽度)约束条件,
    字段名 字段类型(宽度)约束条件,
    字段名 字段类型(宽度)约束条件,
    字段名 字段类型(宽的)约束条件
);

注意事项

1 字段名和字段类型是必须的,宽度和约束条件是可以选择的,即可有可无

2 约束条件可以选择,并且一个字段名可以有多个约束条件

3最后结束的字段语句也就是在最后的括号之前的字段语句  不能有逗号

5  字段的类型

5.1 整形

 在mysql中,不同的整形存储的数字范围不同,常见的整形类型主要有tinyint    smallint    intbigint

 

注意事项:

 1  这些整数的大小默认都是带符号的,其中符号占据一个bite

2  超出的范围的值以范围内最大的值显示,如范围内最大为255,输入256,则显示255

3  如果想要无符号,可以使用约束条件  unsigned

4  在定义整形的时候不需要带宽度,不同的整形会默认带不同的宽度

5.2 浮点型

 mysql中不同的浮点型存储小数的范围和精度不同,主要的浮点型有    float double decimal

float(255,30)      总共255位,小数占30位

double(255,30)       总共255位,小数占30位

decimal(65,30)     总共65位,小数占30位

 

精确度比较 :  float (精确到小数点后7位) < double (精确到小数点后15位) < decimal (精确到小数点后30位)

数据精确度问题很多场景都会发生,如手机号码应该用整形,但是可以采取不同的存储类型,如字符串,该类型不存在精确度问题

5.3 字符串

 mysql中字符串类型有 char 和 varchar

char(4)   最多可以存储四个字符 超过了报错,没有超过也按照四个字符存储,默认用空格填充

varchar(4)    最多可以存储四个字符,超过了报错,没有超过,则有多少存多少

由于5.6以及之前的版本没有开启严格模式,超过不报错,自动截取到字符上限,字符的上限就是括号内的数字  5.7及以后的版本默认开启严格模式

char和varchar的优缺点

char   优点:整存整取,速度快  缺点:自动填充空格,浪费存储空间

varchar 优点:节省存储空间    缺点:速度较char之来的慢

5.4 补充  严格模式

查看严格模式  show variables like '%mode%';

修改严格模式  set global sql_mode = 'strict_trans_tables';

char_length()  可以查看统计的数据长度,默认情况下读取时会自动删去填充的空格

输入  set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";  可以开启不去除空格的严格模式参数

严格模式配置启动不需要重启服务器,只须要重登客户端即可

6  时间类型 

时间类型有date time Datetime year

date    年月日

time    时分秒

datetime  年月日时分秒

yaer    年

可以运用如下图中参数进行配置

create table student(
      id int,
      name char(16),
      born_year year,
      birth date,
      study_time time,
      reg_time datetime
);
View Code

时间类型的数据很多时候可以自动获取

7  枚举与集合

enum  多个选一个  用在枚举中

set      多个选多个  用在集合中,也可以多选一

7.1 枚举类型

创建表格式

crate table gender(
    id int,
    name varchar(16),
    gender enum('male','female')
)

插入的数据只能是enum后括号内的数据,否则报错

7.2 集合类型

创建表格式

create table hobby(
    id int,
    name varchar(16),
    hobby set('read','run','football','basketball')
)

插入的数据只能是set后括号内的数据,否则报错,可以只选一个,也可以选择多个

8  宽度

针对数字类型的时候  如  int(4) 表示数字的展示长度,并不是用来限制的。

当展示长度的位数不够时,用0填充,超过显示超过的数字  如 插入11111 int(2)时展示1111  int(5)时展示11110

在定义数字的时候无须手动添加宽度

9  约束条件

1  unsigned  无符号

2  zerofill   0填充

3  not null  不能为空(要点1)  使用  在表完整结构的位置的约束条件位置写入not null即可

4  default  默认值(要点2)   使用   id int default '0001'  注意0001和int的类型要保证一致

5  unique  单列唯一(要点3)  使用  在表完整结构的位置的约束条件位置写入unique即可

5  unique  多列唯一(要点3)  使用  在结尾的括号之前写入unique(字段名,字段名)  可以使字段名和字段名的组合不能重复,方式单独的字段名可以重复

 

posted @ 2021-09-05 18:56  aa_wang  阅读(35)  评论(0)    收藏  举报