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. select使用css居右对齐

    select{ direction: rtl; } 下面的方法无效 select{ text-align: right; }

  2. ThreadPoolExecutor 线程池 简单解析

    jdk1.8 ThreadPoolExecutor ThreadPoolExecutor实际就是java的线程池,开发常用的Executors.newxxxxx()来创建不同类型和作用的线程池,其底部 ...

  3. spring 注解AOP

     aspectAnnotation的切面信息,加到了AnnotationAwareAspectJAutoProxyCreator的advisorsCache属性里面去了. 解析annotationSe ...

  4. linux基础学习路线&review

    linux基础学习网址: https://www.runoob.com/linux/linux-tutorial.html 比较重点的是这个启动过程的介绍学习:https://www.runoob.c ...

  5. IDEA设置方法参数列表类型自动提示

    默认情况下,IDEA的提示不够完全,可以通过以下设置,将提示功能打开的更完善. 效果如下面俩图所示

  6. C++ 在线编译器(支持 C++11)

    C++11 的 Inheriting constructors 特性在 GCC 4.8 以前的版本及 VS2013 中都没有支持,测试起来比较麻烦,所以搜集到了几个支持 GCC 4.8 及更高版本的在 ...

  7. select 获取option中其他的属性的值

    <select name="tag_keys[]" id="category_type" required> <option value=&q ...

  8. C 结构体、位域

    参考链接:https://www.runoob.com/cprogramming/c-structures.html 结构体是干啥的 例如数组可以用来存储多个相同数据类型的数据项,结构体也是一种数据类 ...

  9. 数据解析模块BeautifulSoup简单使用

    一.准备环境: 1.准备测试页面test.html <html> <head> <title> The Dormouse's story </title> ...

  10. Python【day 10】函数进阶-小结

    本节主要内容1.动态参数 *args **kwargs 形参:*args将多个位置参数聚合打包成元组 **kwargs将多个关键字参数聚合打包成字典 实参:*li1将列表进行解包打散成多个位置参数 * ...