MySQL存储引擎

什么是存储引擎?

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。用于根据不同的机制处理不同的数据

提示:InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),行锁定 和 外键。( 事务主要用于处理操作量大,复杂度高的数据)

MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。

查看MySQL中所有引擎

show engines

create table t1(id int)engines=innodb;  #创建引擎为innodb的表

myisam:5.5以前老的版本使用的存储引擎,拥有较高的插入,查询速度,但不支持事物

blackhole:类似于队列中的数据,存进去消失

memory:通电数据存在,断电丢失

创建表完整的语法

约束条件:可有可无

宽度:限制某些数据类型的存储大小

非空约束

在创建表时可以用NOT NULL关键字设置非空约束

<字段名><数据类型> NOT NULL

实例:

mysql> create table t6(
    id int not null
);
Query OK, 0 rows affected (0.25 sec)

mysql> desc t6;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

字段类型

整形类型INT TINYINT

SMALLINT MEDIUMINT BIGINT

整形类型又称数值型数据,主要用来存储数字。

类型名称 说明 存储需求
TINYINT 很小的整数 1个字节
SMALLINT 小的整数 2个宇节
MEDIUMINT 中等大小的整数 3个字节
INT (INTEGHR) 普通大小的整数 4个字节
BIGINT 大整数 8个字节

从上表中可以看到,不同类型的整数存储所需的字节数不相同,占用字节数最小的是 TINYINT 类型,占用字节最大的是 BIGINT 类型,占用的字节越多的类型所能表示的数值范围越大。

类型名称 说明 存储需求
TINYINT -128〜127 0 〜255
SMALLINT -32768〜32767 0〜65535
MEDIUMINT -8388608〜8388607 0〜16777215
INT (INTEGER) -2147483648〜2147483647 0〜4294967295
BIGINT -9223372036854775808〜9223372036854775807 0〜18446744073709551615

实例:tinyint 范围 -128〜127

create table t7(
    id tinyint
);

实例:int 范围 -2147483648〜2147483647

create table t8(
    id int
);

若插入超过设定宽度,则正常显示

若插入不足,则以空格不全

浮点类型float

DOUBLE 双精度浮点数

DECIMAL 压缩的“严格”定点数

三种浮点型的区别在于 精确到不一样

应用场景:工资,身高,体重。。。

实例:

create table t9(sal float(255,30))  #范围255是最大长度(包括.小数),30代表的是小数的位数

字符类型char varchar

类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

CHAR(M) 为固定长度字符串,应用场景:手机号,身份证,银行卡号。。。

长度范围是 0~255. 当你想要储存一个长度不足 255 的字符时,Mysql 会用空格来填充剩下的字符

优点:速度快

缺点:浪费空间

VARCHAR()为可变字符类型,存几个字符,就是几个字符的大小,每个字符前都要+1bytes,最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。

优点:节省空间

TEXT() 保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。

与 char 和 varchar 不同的是,text 不可以有默认值,其最大长度是 2 的 16 次方-1

日期类型

每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。

类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901 ~ 2155 1 个字节
TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 个字节
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 个字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 个字节

date:2019-12-11

datetime:2019-12-11 15:50:55

time:15:50:55

year:2019

timestamp:时间戳

时间戳实例:

mysql> insert into t11 values(1,null);
Query OK, 1 row affected (0.04 sec)

mysql> select * from t11;
+------+---------------------+
| id   | create_time         |
+------+---------------------+
|    1 | 2019-12-11 15:53:24 |
+------+---------------------+
create table student(
                id int,
                name varchar(4),
                birth date,
                register datetime,
                work_time year,
                t_time time,
                update_time timestamp
            );

python 插入时间数据时,转成str类型

枚举集合

enum:多选一

create table t12(
    id int,
    name varchar(10),
    gender enum('male','female')
);
mysql> insert into t12 values(1,'letin','male');
Query OK, 1 row affected (0.05 sec)

set:多选一 或 多选多

create table t13(
    id int,
    name varchar(10),
    hobbies set('swimming','game','study')
);
mysql> insert into t13 values(1,'letin','swimming,game,study');
Query OK, 1 row affected (0.06 sec)

mysql> select * from t13;
+------+-------+---------------------+
| id   | name  | hobbies             |
+------+-------+---------------------+
|    1 | letin | swimming,game,read |
+------+-------+---------------------+
1 row in set (0.00 sec)

约束条件

unique将某个字段设置为唯一的值

not + null + unique 变为主键

create table t14(
    id int not null unique,
    name varchar(10)
);
mysql> insert into t14 values(1,'letin');
Query OK, 1 row affected (0.05 sec)

mysql> insert into t14 values(1,'leiting');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'   #id设置了唯一,重复后会报错

主键 自增

primary key-–-–-–>not null unique

主键就是表中的索引:可以通过索引快速查找某些数据

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

  • 每个表只能定义一个主键。
  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值

主键实例:

mysql> create table t15(
    -> id int primary key,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.19 sec)

主键自增实例:primary key auto_increment

mysql> create table t16(
    -> id int primary key auto_increment,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.20 sec)
mysql> desc t16;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

自增默认从1开始

mysql> insert into t16(name) values('letin');
Query OK, 1 row affected (0.04 sec)

unsigned无符号

mysql> create table t17(
    -> id int unsigned
    -> );
Query OK, 0 rows affected (0.19 sec)

插入数字是不能带符号

zerofill使用0填充

mysql> create table t18(
    -> id int zerofill
    -> );
Query OK, 0 rows affected (0.22 sec)
mysql> insert into t18 values(100);
Query OK, 1 row affected (0.04 sec)

mysql> select * from t18;
+------------+
| id         |
+------------+
| 0000000100 |
+------------+
1 row in set (0.00 sec)

删除记录

delete 清空记录,id还是接着清除前的数字

mysql> delete from t18;
Query OK, 1 row affected (0.04 sec)

mysql> select * from t18;
Empty set (0.00 sec)

mysql> desc t18;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type                      | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id    | int(10) unsigned zerofill | YES  |     | NULL    |       |
+-------+---------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)

truncate清空多有记录,并且id重置为0

truncate table t20;

MySQL字段类型 约束的更多相关文章

  1. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  2. MySQL 字段类型介绍

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  3. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  4. MySQL字段类型与操作

    MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...

  5. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

  6. Mysql字段类型与合理选择

    字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许 ...

  7. MySql字段类型及字节

    字段类型:TINYINT-----------------一个很小的整数.有符号的范围是-128到127,无符号的范围是0到255. SMALLINT--------------一个小整数.有符号的范 ...

  8. MySQL字段类型最全解析

    前言: 要了解一个数据库,我们必须了解其支持的数据类型.MySQL 支持大量的字段类型,其中常用的也有很多.前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇 ...

  9. 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件

    字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...

随机推荐

  1. python批量裁剪图片

    """用Pythonp批量裁剪图片""" from PIL import Imageimport matplotlib.pyplot as ...

  2. vuex源码分析(二) state及strict属性 详解

    state也就是vuex里的值,也即是整个vuex的状态,而strict和state的设置有关,如果设置strict为true,那么不能直接修改state里的值,只能通过mutation来设置 例1: ...

  3. 【MySQL配置参数】sync_binlog和innodb_flush_log_at_trx_commit

    sync_binlog和innodb_flush_log_at_trx_commit这2个参数都是MySQL中,配置日志持久化时机的,但有很大不同,做下对比分析总结. 1.MySQL服务器配置参数:s ...

  4. 阿里云容器服务中国最佳,进入 Forrester 报告强劲表现者象限

    近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告. 报告显示:阿里云容器服务创造了中国企业最好成绩,与谷歌云位于同一水平线,进入强劲表现者象限. 究其原因,分析师认为: ...

  5. Kubernetes PV与PVC的关系

    Kubernetes PV与PVC的关系 PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理,分为有静态与动态.PersistentVolumeClaim ...

  6. 【UOJ#74】【UR #6】破解密码

    [UOJ#74][UR #6]破解密码 题面 UOJ 题解 发现这个过程是一个字符串哈希的过程. 把第一位单独拿出来考虑,假设这个串是\(p+S\),旋转后变成了\(S+p\). 其哈希值分别是:\( ...

  7. kali渗透综合靶机(五)--zico2靶机

    kali渗透综合靶机(五)--zico2靶机 靶机地址:https://www.vulnhub.com/series/zico2,137/#modal210download 一.主机发现 1.netd ...

  8. Python【day 10】函数进阶-动态函数

    形参小结 1.位置参数2.默认值参数3.动态参数 1.*args 位置参数的动态传参. 系统会自动的把所有的位置参数聚合成元组 2.**kwargs 关键字参数的动态传参. 系统会自动的把所有的关键字 ...

  9. electron——ipcMain模块、ipcRenderer模块

    ipcMain 从 主进程 到 渲染进程 的异步通信. ipcMain模块是EventEmitter类的一个实例. 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息. 从渲染器进 ...

  10. python类模拟电路实现

    实现电路: 实现方法: class LogicGate(object): def __init__(self, n): self.name = n self.output = None def get ...