mysql之引擎和表色数据类型

一,数据存储引擎

什么是引擎?一个功能的核心部分

引擎可以被分类  而为什么要分类呢?    需求场景的不同催生了不同的引擎分类

在mysql中,核心功能是存储数据,涉及到存储数据的代码,就称之为存储引擎

根据不同的需求,也有着不同的引擎分类

不同的引擎测试:

创建表时在最后制定引擎名称    engine = xxxx

比如: 
create table t1(id int)engine=innodb
create table t2(id int not null)engine=csv
insert into t1 value(1);
insert into t2 value(1);

innoDB 是默认引擎,直接存放于硬盘上,并且支持事务,行锁,外键

mysiam,csc 都是把数据存放于硬盘上

blackhole 是黑洞引擎,不存放任何数据

memory 把数据存放于内存里面,需要重启服务端数据才会消失

二,创建表的完整语句

基本结构如下:

create table 表名 (字段名称 数据类型[(长度) 约束条件],字段名称 数据类型[(长度) 约束条件].......)

这里可以添加多个数据

必须存在的值:字段名,数据类型和表名

可选的:长度和约束条件

(数据类型也是一种约束,所以约束指得是除了数据类型意外的其他规范)

如果添加的数据超过了制定的长度,超出部分就直接丢弃了;

注意:

2.1字段名,库名,表名都不能是mysql的关键字.

2.2在同一张表中,字段名是不能相同的

2.3最后一个字段后不加逗号

三,数据类型

为什么要讲数据分类?

1,为了描述事物更加准确

2,描述取来更加方便

3,节省内存空间

3.1整型

分类                tinyint                  smallint             mediumint                 int                            bigint

字节数                 1                         2                               3                         4                                8

作用:是存放整数的数类型,有id 身份证号 手机号等

测试:默认整型都是有符号的,需要一个二进制位来存储符号

给整型加上约束unsigned来表示无符号(如果超出了范围就存最大的数)(0,255)

如果有符号存的范围是(-128,127)

上面特性的出现是因为mysql处于非严格模式

修改严格模式:'查看当前模式  show variables like "sql_mode"; 
                          修改为严格模式  set global sql_mode = "STRICT_TRANS_TABLES";

  (如果在严格模式下如果超出范围就会报错)

强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制

所以我们在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的宽度足够显示当初存放的完整的数据

显示时,不够8位用0填充,如果超出8位则正常显示

create table t13(id int(10) zerofill);

3.2浮点型:小数型

分类               float            double             decimal

字节数             4                   8                     不确定(手动指定)

float(m,d)
double(m,d)
decimal(m,d)

长度说明:m:这个浮点型整体的长度     d:小数部分的长度

例如 float(5,3)           最大值:99.999

区别:

相同点:小数部分的最大长度都是30

不同点:float 和double的最大长度为255,而demcimal的整数部分组大长度是65

             精度不同:decimal    double      float      精度逐渐降低

3.3字符串

(1)作用:姓名,地址  等.用于存放一些纯文字的信息

(2)分类

char   定长

varchar    変长

text 大文本

blob 没有编码的文本

binary 与 bignia

(3)测试:字符的宽度限制单位是字符的个数

create table t12(x char(4))    #超出四个字符则报错,不足四个字符则用空格补充

create table t13(y varchar(4))    #超过四个字符则报错,不足四个字符则有几个存几个

insert into t12 values('a'); #'a    '
insert into t13 values('a'); #'a'

可以查看存入的值得长度,char  和varchar的长度

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x) from t12; #4
select char_length(y) from t13; #1

注意:当你在执行这样的查询语句时,mysql会自动将参数末尾的空格去掉,当你在模糊搜索时要注意定长符,后面可能有空格,%是任意个数的任意字符      _是任意的一个字符

select *from t19 where  name like "yh%";

char和varchar的优缺点(在使用起来并没有很大的区别)

char存取效率高,但是浪费空间                            egon alex lxx  wxx  yx

varchar存取效率低于char,但是节省存储空间      (1bytes+egon)(1bytes+alex)(1bytes+lxx)

3.3时间和日期

分类:
time     时分秒       11:11:11

date    日期(年月日)        1999-01-27

year    年        1999

datetime  日期加时间      范围大

timestamp   时间戳     范围小(自动更新时间)

datetime和timestamp都可以表示日期和时间

共同点:时间的存取通过字符串类型都可以通过now()函数来插入当前时间

不同之处:年份最大的范围不同,时间戳可以为空,代表当前时间(时间戳在你更新记录时会自动更新当前时间)

测试

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

insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');

3.4枚举和集合

枚举enum,多选一个

用于描述一个已知范围的数据(只能是字符串),可以通过枚举的序号来插入值,但是只能选一个

集合 set,多选多

用于描述一堆数据(只能是字符串),值可以任意选多个,但必须都在集合当中,也可以用序号来取值(类似于索引),但用序号只能取一个,

测试:

create table teacher(
    id int,
    name char(16),
    sex enum('male','female','others'),
    hobbies set('play','read','music','piao')
);

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/82659865