一、存储引擎

不同的存储引擎对应着不同的对数据的处理机制

mysql主要的存储引擎

  • innodb

    • 是mysql5.5版本之后默认的存储引擎,数据相对更安全
  • myisam
    • 是mysql5.5版本之前的默认存储引擎,速度快
  • memory
    • 内存引擎,断电丢失
  • blackhole
    • 无论存什么都会立刻消失(黑洞)

用代码测试不同引擎的区别

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

# 不同的存储引擎在存储表的时候 异同点
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=blackhole;
create table t4(id int) engine=memory;

结果

​ 对每个表添加一个数据可以看到除了blackhole引擎,其他表的数据都还在,这里要注意,memory的数据只是存在内存中了,重启一下服务数据就丢失了

创建表的完整语法

# 基本语法
create table 表名(
字段1 类型(宽度(可不写)) 约束条件,
字段1 类型(宽度(可不写)) 约束条件,
字段1 类型(宽度(可不写)) 约束条件
)

注意

  • 在同一张表中的字段名不能重复
  • 宽度和约束条件是可选的,有默认值,字段名和字段类型必须写,约束条件可以写多个
  • 最后一行不能有逗号
  • 针对不同版本对数据宽度的限定情况
    • 5.6版本默认没有开启严格模式,如果设定char(1)但是给了多个字符,会自动截取第一个
    • 5.7版本及以后默认开启了严格模式,存多了会报错
  • 约束条件举例:create table t6(id int,name char not null); not null表示这个字段的数据不能插入null
  • 宽度和约束条件的关系
    • 宽度:限制数据的长度
    • 约束条件:在宽度的基础上增加额外的约束

二、数据类型

前引:严格模式

  • 查看严格模式

    • show variables like “%mode”;
  • 模糊查询
    • 关键字like
    • %:匹配任意多个字符串
    • _:匹配任意单个字符串
  • 修改严格类型
    • set session 只在当前窗口有效
    • set global 全局有效
    • set global sql_mode = 'STRICT_TRANS_TABLES';
    • 修改完成之后重新进入服务端即可

1 整形

  • 分类

    • TINYINT SMALLINT MEDUMINT INT BIGINT
  • 举例
    • 年龄,等级,id
# 不同的整形类型最大的区别就是能取到的范围,如果超出这个范围只会存最大范围(非严格模式下)
# 以上的5中整形类型能取的范围依次增大,所以我们通常用int能应付大部分情况 # 例子:tinyint
如果我们创建了一个tinyint类型的字段,他的范围是-128~127,超出这个范围就会报错 # 特殊约束,unsigned约束可以让该字段的范围只有正数,会把负号内的位数全都带到正数中,也就是说
create table t6(id tinyint usigned);
# 这里的id的范围不再是-128~127 而是0~255 # 长度:整形内的长度不表示限制位数
# 例子:
id int(8)
# 如果数字没超出8位,默认用空格填充至8位(显示的时候会自动去除)
# 如果超出了8位,有几位存几位,但是还是遵循该类型的最大范围
# 我们可以用zerofill约束让空格变成0显示出来
create table t7(in int(8) zerofill);

2 浮点型

  • 分类

    • FLOAT、DOUBLE、DECIMAL
  • 举例
    • 身高、体重
# 储存限制(不写的默认值)
create table t10(id float(255,30));
create table t11(id double(255,30));
create table t12(id decimal(65,30)); # 插入数据验证区别
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);
insert into t12 values(1.111111111111111111111111111111);

总结:

精度从小到大:float<double<decimal

具体场景用不同的精度

3 字符类型

3.1 类型

  • char 定长

    • char(4)数据超过4个字符直接报错,不够4个用空格补全
  • varchar 变长
    • varchar(4)数据超过4个字符直接报错,不够有几个存几个

3.2 举例验证区别

可以用length关键字来分析内含几个字符,

修改sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

在重启服务后,这个修改能让mysql不做自动剔除操作

得到的结果是,同样只插入了一个字符的数据,varchar的长度是1,char的长度是4

3.3 对比优缺点

  • char

    • 缺点:浪费空间(因为会自动补全)
    • 优点:读取很简单,因为我们取的都是最大长度
  • varchar
    • 优点:节省空间(不会自动补全)
    • 缺点:读取麻烦,存取都需要报头来限定长度。

总结:两者各有好处,都有用处

4 日期类型

分类

  • date:年月日 2020-5-4
  • datetime :年月日时分秒 2020-5-4 20:28:28
  • time :时分秒 20:28:28
  • year:2020
create table student(
now_year year,
now_data date,
now_datatime datetime,
now_time time
);
insert into student values("2020","2020-5-4","2020-5-4 11:11:11","11:11:11");

5 枚举和集合类型

  • 枚举(enum)多选一
  • 集合(set)多选多

具体使用

create table user(

​ gender enum('male','female','others'),

​ hobby set('read','DBJ','hecha')

)

insert into user values('male','read,hecha');

前一个是枚举,可以在3个中选一个,后一个是集合,可以多选,也可以单选

但是这两种都不能选自己没有的!

day45 数据库基础的更多相关文章

  1. 数据库基础,表及SQL语句

    数据库基础及T-SQL语句 字符类型: int 整型 float 小数 double 小数 varchar(20) 字符串 bit 布尔型数据 datetime 日期时间类型 text 长文本 (以下 ...

  2. Oracle 数据库基础——安装

    一.数据库基础知识 1.概念 数据库全称数据库管理系统,简称DBMS,是一种在计算机中,针对数据进行管理.存储.共享的一种技术. 2.分类 数据库的发展过程中,按逻辑模型可分为以下几种: 3.关系型数 ...

  3. 10月14日下午MySQL数据库基础

    数据库基础 类型: 1.varchar:字符串,用于姓名班级,地址等,地址一般长50,姓名长20 2.int:整数,用于成绩,序号等 3.float:小数 4.bit:布尔型,用于性别等 5.时间也用 ...

  4. oracle系列--第一篇 数据库基础

    第一章 数据库基础 1.1 数据管理概述 1.1.1 什么是数据管理 与我们人类相比,计算机的最大优势就是能够高速.精准地运行,其运行的过程就是执行程序代码和操作指令.处理数据的过程.可以说,数据处理 ...

  5. PHP数据库基础

    PHP数据库基础: 1.varchar:字符串,用于姓名班级,地址等,地址一般长50,姓名长20 2.int:整数,用于成绩,序号等 3.float:小数 4.bit:布尔型,用于性别等 5.时间也用 ...

  6. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  7. SQL 必知必会-- 第1课:数据库基础和什么是SQL

    第1课 了解SQL 1 1.1 数据库基础 11.2 什么是SQL 61.3 动手实践 71.4 小结 8 第一课主要是一些概念,具体笔记如下: 1,数据库(database):保存有组织的数据的容器 ...

  8. mysql数据库基础的简单操作指南

    最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据 ...

  9. 数据库基础(变量、运算符、if语句、while语句)

    数据库基础(变量.运算符.if语句.while语句)   变量: 定义变量:declare @变量名 数据类型 变量赋值:set @变量名 = 值 输出:print 变量或字符串 SQL语言也跟其他编 ...

随机推荐

  1. HDU - 3591 The trouble of Xiaoqian 题解

    题目大意 有 \(N\) 种不同面值的硬币,分别给出每种硬币的面值 \(v_i\) 和数量 \(c_i\).同时,售货员每种硬币数量都是无限的,用来找零. 要买价格为 \(T\) 的商品,求在交易中最 ...

  2. 使用Volo.Abp.MailKit发送邮件

    Volo.Abp.MailKit封装继承MailKit库,为Abp邮件发送提供了快捷实现. 邮箱配置 qq邮箱支持smtp功能,需要去申请开通.参考qq邮箱设置,最重要的是smtp发送邮件,qq邮箱对 ...

  3. 4.vue class 绑定- model基础应用

        //代码可以复制自行体验   <template>     <div id="app" @click.stop="test('你点击了我big- ...

  4. Telegraf和Grafana监控多平台上的SQL Server-自定义监控数据收集

    问题 在上一篇文章中,我们使用Telegraf自带的Plugin配置好了的监控,但是自带的Plugin并不能完全覆盖我们想要的监控指标,就需要收集额外的自定义的监控数据,实现的方法有: 开发自己的Te ...

  5. Tensorflow从0到1(3)之实战传统机器算法

    计算图中的操作 import numpy as np import tensorflow as tf sess = tf.Session() x_vals = np.array([1., 3., 5. ...

  6. 如何用 Python 和 API 收集与分析网络数据?

    摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...

  7. deepin文件用途

    Bin:二进制文件, 存放二进制文件Dev:存放外接设备,其中外接设备不能被直接使用需要挂载(启动设备)Etc:存放配置文件Home:家目录,出了root用户外的其他用户类似于Windows中的use ...

  8. ca13a_c++_顺序容器的操作6删除元素

    /*ca13a_c++_顺序容器的操作6删除元素c.erase(p) //删除迭代器p指向的位置c.erase(b,e) //删除b to e之间的数据,迭代器b包括,e不包括c.clear()//删 ...

  9. SpringBoot + Mybatis + Redis 整合入门项目

    这篇文章我决定一改以往的风格,以幽默风趣的故事博文来介绍如何整合 SpringBoot.Mybatis.Redis. 很久很久以前,森林里有一只可爱的小青蛙,他迈着沉重的步伐走向了找工作的道路,结果发 ...

  10. Consul入门初识

    Consul Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCrop公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源 ...