MySQL study notes -2 [Luffy learns 6 days to learn database course]

Storage engine

There are corresponding processing mechanisms to store different data

mysql main storage engine

·innodb

It is the default storage engine of mysql5.5 and later

Store data more securely

·myisam

Is the default storage engine before MySQL 5.5

Faster than innodb

·memory

The memory engine (all data is placed in the memory) power failure data loss

·blackhole

No matter what is stored, it disappears immediately (black hole)

"""
#查看所有的存储引擎
 show  engines;

#不同引擎创建表
create table t1(id int) engine=innodb/myisam/...
差异: 
    innodb有表结构、表数据两个文件;myisam有表结构、表数据、索引三个文  件; memory有表结构,数据存在内存,不需要数据文件; blackhole 只有表结 构。

"""

Complete syntax for creating a table

#语法
create table 表名(
    字段名1  类型(宽度)  约束条件1 约束条件2,
    字段名2  类型(宽度)  约束条件1,
    字段名3  类型(宽度)  约束条件1
)

#注意
1.在同一张表中字段名不能重复
2.宽度和约束条件是可选的,而字段名和字段类型是必须的
3.最后一行不能有逗号
    create table t6(
        id int,
        name char(5)
     );

"""补充"""
#宽度
  一般情况下指的是对存储数据的限制
    严格模式开启时,写入内容超过宽度限制的会报错; 不开启严格模式,写入内容超过宽度限制将截取前N个字符;
     MySQL-5.7版本及以上默认开启严格模式。

#约束条件之 null / not null
 create table t8(id int not null, name char(5) not null);
    不允许空值
"""
宽度和约束条件的关系:
  宽度用来限制数据的存储
  约束条件实在宽度的基础之上增加的额外的约束
"""

Strict mode

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

 模糊匹配/查询
    关键字 like
        %:匹配任意多个字符
        _:匹配任意单个字符

#修改严格模式
  set session   /只在当前窗口有效
  set global    /全局有效

  set global sql_mode='strict_trans_tables';

Basic data type

Integer

Type: tinyint(1byte), smallint(2byte), meduimint(3byte), int(4byte), bigint(8byte)

Function: store age, level, id, number, etc.

"""
是否有符号
    默认情况下整型带符号
超出会如何
    超出限制只存最大可接受值
"""
#约束条件之 unsigned 无符号
  create table t10(id int unsigned);

#针对整型,括号内的宽度限制
 create table t12(id int(8));
 insert into t12 values(123456789);
"""
特例:只有整型括号里面的数字不是表示限制位数而是显示长度
  id int(8)
    如果数字没有超出8位,那么默认用空格填充至8位
    如果数字超出了8位,那么有几位就存几位(但还是要遵守最大范围)
"""
 #用0填充至8位 , 约束条件 zerofill
  create table t13(id int(8) zerofill );

#总结:
 针对整型字段,括号内无需指定宽度,因为它默认的宽度已经足够显示所有的数据了

Floating point

Category: float, double, decimal

Role: height, weight, salary. . .

#存储限制
float(255,30) #总共255位,小数部分占30位
double(255,30) #总共255位,小数部分占30位
decimal(65,30) #总共65位,小数部分占30位

create table t15 values(id float(255,30));
#精度
 float < double < decimal

Character type

classification

"""
 char:定长
        char(4)  数据超过4个字符直接报错,不够4个字符空格补全

varchar: 变长
        varchar(4)  数据超过4个字符直接报错,不够4个有几个存几个

"""
create table t18(name char(4));

insert into t18 values('a')

#char_length统计字段长度
select char_length(name) from t18;

"""
 char在硬盘上寸的数据是带有空格的真正数据,但是在显示的时候mysql会自动将多余的空格剔除
"""

#再次修改sql_mode ,让MySQL不要做自动剔除操作(见修改严格模式)
set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

#第一个参数开启严格模式,第二个参数取消字符自动剔除空格

Char and varchar comparison

"""
char
    优点:存取都很简单,直接按照固定的字符存取数据即可
    缺点:浪费空间

varchar
    优点:节省空间
    缺点:存取较为麻烦
         存的时候需要制作抱头,取的时候也需要先读取报头,之后才能读取真        实数据

"""

Time type

·classification

Date: Date 2020-2-2

​ datetime: year, month, day, hour, minute and second 2020-2-2 11:11:11

​ time: hours, minutes and seconds 11:11:11

​ year: year 2020

#示例
create table student(
    id int,
    name varchar(10),
    born_year year,
    birth date,
    study_time time,
    reg_time datetime
);

insert into student values(1,'egon','1999','1999-8-8','11:11:11','2020-8-8 11:11:11');

Enumeration and collection types

·classification

"""
枚举(enum) 多选一(单选)
集合(set)  多选多(多选)
"""

·use

#枚举
create table user(
    id int,
    name char(16),
    gender enum('male','female','other')
);
insert into user values(1,'jason','male'); #正常
insert into user values(2,'egon','xxxooo'); #报错
 #枚举字段,后期在存数据的时候只能从枚举里面选择一个存储

#集合
 create table teacher(
    id int,
    name char(16),
    hobby set('read','DBJ','HAHA')
);
 #同理,集合可以选一个或多个,不在选项里的会报错

Video tutorial link: https://www.bilibili.com/video/BV1tK41137u5?t=13

Guess you like

Origin blog.51cto.com/14895184/2677690