MySQL的数据类型

数据类型

数据长什么样
数据需要多少空间存放

数据类型分类

系统内置数据类型
用户自定义数据类型

MySQL支持的数据类型

  • 数据类型
  • 字符串(字符)类型
  • 日期/时间类型

官方数据类型参考链接

数据类型

正确选择数据类型对于获得高性能至关重要,三大原则

  1. 更小的通常更好,尽量使用可正确存储数据的最小数据类型
  2. 简单就好,简单数据类型的操作通常需要更少的CPU周期
  3. 尽量避免NULL,包含为NULL的列,对MySQL更难优化

整数型

修饰符

适用所有类型的修饰符

NULL 数据列可包含NULL值(空值),默认值
NOT NULL 数据列不能包含NULL值(空值),类似必选项
DEFAULT 默认值,如果用户没有填写的话,适用默认值填入
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL
UNIQUE KEY 唯一键,非主键的,所有记录中此字段的值不能重复,但可以为NULL
CHARACTER SET name 指定一个字符集

适用数值型的修饰符

AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号(正数,不存在负数)

范例1:关于AUTO_INCREMENT

(root@localhost) [(none)]> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.00 sec)

-- auto_increment_increment   定义步长
-- auto_increment_offset   定义初始值

范例2:关于数据类型的空间区间的问题

-- 创建一个数据库db1,并创建一个t1表,字段为id,数据类型为init的,并且是正整数,自动增长,主键,初始值为4294967294
15:05:23 (root@localhost) [(none)]> CREATE DATABASE db1;
Query OK, 1 row affected (0.04 sec)

15:06:11 (root@localhost) [(none)]> USE db1;
Database changed
15:06:27 (root@localhost) [db1]> CREATE TABLE t1 (
    -> id int UNSIGNED PRIMARY KEY AUTO_INCREMENT
    -> ) AUTO_INCREMENT = 4294967294;
Query OK, 0 rows affected (0.16 sec)

15:07:10 (root@localhost) [db1]> SELECT * FROM t1;
Empty set (0.00 sec)

-- 当插入NULL空值的时候,因为此字段为主键,不能为NULL,所以就算填入NULL的时候,MySQL也会自动添加数据进入
15:07:19 (root@localhost) [db1]> INSERT INTO t1 VALUES (NULL);
Query OK, 1 row affected (0.03 sec)

15:07:45 (root@localhost) [db1]> SELECT * FROM t1;
+------------+
| id         |
+------------+
| 4294967294 |
+------------+
1 row in set (0.00 sec)

15:07:48 (root@localhost) [db1]> INSERT INTO t1 VALUES (NULL);
Query OK, 1 row affected (0.02 sec)

15:07:50 (root@localhost) [db1]> SELECT * FROM t1;
+------------+
| id         |
+------------+
| 4294967294 |
| 4294967295 |
+------------+
2 rows in set (0.00 sec)

15:07:52 (root@localhost) [db1]> INSERT INTO t1 VALUES (NULL);
ERROR 1062 (23000): Duplicate entry '4294967295' for key 'PRIMARY'
-- 因为init类型是占用了4个字节(4294967296),加之正整数从0开始计算,故可存储的最大数值为4294967295
-- 另如果是mariaDB的话,可能提示的报错为Out of range value for column 'id' at row 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值