5:数据类型-MySQL

2023-05-16

目录

  • 5.1 数据库的数据类型问题
  • 5.2 int数值类型
  • 5.3 int类型实际操作和注意事项
  • 5.4 浮点数类型
  • 5.5 定点数类型
  • 5.6 字符串与文本类型
  • 5.7 布尔类型
  • 5.8 枚举类型
  • 5.9 枚举类型的另类存储方式
  • 5.10 枚举类型的好处,为何要用枚举类型,企业可能用在哪?
  • 5.11 set类型
  • 5.12 时间日期类型

5.1 数据库的数据类型问题

企业中的数据类型定义没有统一的标准,每一个公司会根据自己的产品需要和需求来定制属于自己的数据类型

5.2 int数值类型

在企业中要使用到整型的地方会特别的多,但是十分值得注意的是,数据库和我们的编程不太一样,它会更加的珍惜字节空间

所以在定义数据库的数据类型前,需要考虑所定义字段的大小和所定义字段的实际使用(有无符号)是什么样的

MySQL的各种数据类型的范围大小可以上网查询, 例如无符号整型,范围是(-128,127)

age tinyint unsigned comment'年龄'

5.3 int类型实际操作和注意事项

mysql> create table emp(
    -> id smallint unsigned auto_increment primary key comment'id',
    -> age tinyint unsigned ,
    -> kkk int(6)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| emp               |
| teacher           |
+-------------------+
2 rows in set (0.00 sec)

mysql> desc emp
    -> ;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type                 | Null | Key | Default | Extra          |
+-------+----------------------+------+-----+---------+----------------+
| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| age   | tinyint(3) unsigned  | YES  |     | NULL    |                |
| kkk   | int(6)               | YES  |     | NULL    |                |
+-------+----------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> insert into emp values(null,128,99999999);
Query OK, 1 row affected (0.00 sec)

mysql> select * from emp;
+----+------+----------+
| id | age  | kkk      |
+----+------+----------+
|  1 |  128 | 99999999 |
+----+------+----------+
1 row in set (0.00 sec)

注意:在desc cat表的时候,数据类型后面有宽度的限制,宽度限制是可以超过的,但是不能超过所定义数据类型值的范围

5.4 浮点数类型

在企业中一般不会要求使用浮点型,容易丢失精度,只在特殊的要求下使用浮点类型的

丢失精度是指,float占用32bit,其中24bit用于表示有效数字,只能表示6-7位有效数字

create 表名  字段名 浮点类型(最大长度位m,小数位d)

注意:最大长度位要大于小数位,超过的小数位会四舍五入,至于存储范围取决于是否定义了无符号,从(0.0 ,99999.9)或 (99999.9,99999.9),默认大小为24位数字,精度为6位

mysql> create table t_1(
    -> number_1 float(3,1),
    -> number_2 double(5,2)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| number_1 | float(3,1)  | YES  |     | NULL    |       |
| number_2 | double(5,2) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into t_1 values(2.1,2.23);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
+----------+----------+
1 row in set (0.00 sec)

四舍五入


mysql> insert into t_1 values(2.9,2.77777777);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
|      2.9 |     2.78 |
+----------+----------+
2 rows in set (0.00 sec)
mysql> insert into t_1 values(2.99,2.99999999999999999999999999999999999);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
|      2.9 |     2.78 |
|      3.0 |     3.00 |
+----------+----------+
3 rows in set (0.00 sec)
mysql> insert into t_2 values(9.1111111111111111111111111111111);
Query OK, 1 row affected (0.01 sec)


mysql> select * from t_2;
+-----------------------+
| number                |
+-----------------------+
| 9.1111111111111100000 |
+-----------------------+
1 row in set (0.00 sec)

可以看到精度丢失是十分严重的,所以在对钱的数据管理时候不能使用浮点数,如何解决这个问题呢?这就要用到定点数

5.5 定点数类型

定点数不会丢失精度,因为它的整数和小数分开存储管理,在生活中有许多的小数要求的精度非常之高,所以需要使用定点数

mysql> create table t_3(
    -> number decimal(20,19)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_3;
+--------+----------------+------+-----+---------+-------+
| Field  | Type           | Null | Key | Default | Extra |
+--------+----------------+------+-----+---------+-------+
| number | decimal(20,19) | YES  |     | NULL    |       |
+--------+----------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_3 values(8.111111111111111111111);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from t_3;
+-----------------------+
| number                |
+-----------------------+
| 8.1111111111111111111 |
+-----------------------+
1 row in set (0.00 sec)

5.6 字符串与文本类型

在字符类型中比较常用的是varchar(变长)类型,与之相对应的是char(定长)类型

当然varcahr的使用会比较的多,最主要优势就是它会自动回收多余的字符空间,但是它相对于char的效率也会更低

对于长篇的博客和论文使用字符类型肯定是无法进行存储的,所以在数据库中有一个专门存储文本的数据类型,例如text

5.7 布尔类型

总的讲就是true1false0

mysql> create table t_4(
    -> boool boolean
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t_4 values(true);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_4;
+-------+
| boool |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

mysql>

5.8 枚举类型

facebook有一大堆性别选项是怎么实现的?

我们国内多的社交网站对性别的选项一般都会有三个:男、女、保密

生活中很多数据是,是大于两种选择的类别,对这种数据类型的定义使用枚举类型(enum)

mysql> create table t_5(
    -> gender enum('man', 'woman', '?', 'nothing', 'it')
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_5;
+--------+----------------------------------------+------+-----+---------+-------+
| Field  | Type                                   | Null | Key | Default | Extra |
+--------+----------------------------------------+------+-----+---------+-------+
| gender | enum('man','woman','?','nothing','it') | YES  |     | NULL    |       |
+--------+----------------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_5 values('man');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_5 values('123');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
mysql> select * from t_5;
+--------+
| gender |
+--------+
| man    |
+--------+
1 row in set (0.00 sec)

mysql>

5.9 枚举类型的另类存储方式

枚举不太一样的存储方式

语法:字段名 enum('选择1','选择2','选择3'...)
mysql> insert into t_5 values(2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_5;
+--------+
| gender |
+--------+
| man    |
| woman  |
+--------+
2 rows in set (0.00 sec)

注意:枚举类型选项的存储非常节省空间,它对选项的的管理使用整数,选择1,对应的整数就是1,选择2,对应的整数就是2…以此类推

5.10 枚举类型的好处,为何要用枚举类型,企业可能用在哪?

使用枚举类型可以方便我们解决某些需求外,速度很快又节省很多空间

5.11 set类型

如果说枚举是做单选题,那set就是做多选题

生活中还有许多的数据是在限定范围内可以做多个选项的,这个时候就要用set类型,set是使用2的n次方来存储的

mysql> desc t_6;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| hobby | set('A','B','C','D','E') | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

'inset into t_6 values('A,B,C')' at line 1
mysql> insert into t_6 values('A,B,C');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_6;
+-------+
| hobby |
+-------+
| A,B,C |
+-------+
1 row in set (0.00 sec)

mysql> insert into t_6 values('C,B,E');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_6;
+-------+
| hobby |
+-------+
| A,B,C |
| B,C,E |
+-------+
2 rows in set (0.00 sec)

5.12 时间日期类型

基本上使用的是datetime,这是每个表必须有的数据,记录表的各种操作的时间,这个一般也不会手动输入,都是在编程的时候会自动获取时间

mysql> create table t_7(
    -> createdTime datetime
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_7;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| createdTime | datetime | YES  |     | NULL    |       |
+-------------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_7 values('2021-09-17 01:28:00');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_7;
+---------------------+
| createdTime         |
+---------------------+
| 2021-09-17 01:28:00 |
+---------------------+
1 row in set (0.00 sec)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5:数据类型-MySQL 的相关文章

随机推荐

  • 11:Server-步入Linux的现代方法

    目录 11 1 Linux Server服务器说明11 2 后话11 3 SSH远程登录11 4 WSL提及 11 1 Linux Server服务器说明 详见 xff1a Ubuntu Server 20 04LTS下载及安装教程 11
  • 10:编辑器之神——Vim-步入Linux的现代方法

    目录 附上 xff1a vi vim键盘图10 1 编辑器简单介绍 xff1a vim编辑器之神 xff1b emac神之编辑器10 2 vim的简单使用方式10 3 移动光标10 4 翻页10 5 不同方式编辑文本 跳跃单词操作技巧10
  • 使用phantomjs将网页转换成pdf或者长图片

    最近有一个将微信公众号的文章转为pdf的想法 xff0c 主要是为了将很多文章保存下来 xff0c 方便打印阅读 最终使用的方法是phantomjs来生成网页的pdf PhantomJS 是一个基于WebKit的服务器端 JavaScrip
  • PUTTY-0.75 下载安装及SSH远程连接方法

    目录 一 下载教程1 进入putty官网2 点击Download it here3 选择安装模式 二 安装教程1 打开安装包2 产品功能设置 三 SSH远程连接方法1 Linux Server 下载SSH2 获取Server地址3 SSH远
  • MTPuTTY连接Ubuntu\Linux SSH登陆出现Access Denied错误

    目录 一 异常错误二 原因三 解决方法1 进入root用户2 进入 etc ssh 目录3 添加PermitRootLogin yes4 重启SSH5 SSH重新连接Ubuntu 一 异常错误 用MTPuTTY远程连接Ubuntu时 xff
  • Ubuntu cannot open directory ‘.‘: Permission denied错误

    目录 一 异常错误二 原因三 解决方法1 前面加上sudo2 或者进入root用户 一 异常错误 Ubuntu正常输入命令出现异常ls cannot open directory 39 39 Permission denied 二 原因 权
  • Ubuntu “readonly” option is set(add to override)错误

    目录 一 异常错误二 原因三 解决方法 一 异常错误 使用vim退出时经常出现 readonly option is set add to override 的错误 二 原因 当前用户没有权限对文件作修改 xff0c 可以强制退出 q 取得
  • Ubuntu E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? 错误

    目录 一 异常错误二 原因二 解决方法1 网络问题2 source的问题 一 异常错误 apt install 时遇到这个问题 xff0c 无法获取某些存档 二 原因 网络连接超时 二 解决方法 1 网络问题 网关错误拦截了数据包或者防火墙
  • VS2019 error C4996: ‘scanf‘: This function or variable may be unsafe 错误

    目录 一 异常错误二 原因三 解决方法1 替换scanf函数2 添加宏定义3 关闭安全开发生命周期 SDL 检查 一 异常错误 span class token operator span error span class token co
  • VS2019 error C4703: 使用了可能未初始化的本地指针变量 错误

    目录 一 异常错误二 原因三 解决方法1 关闭安全开发生命周期 SDL 检查2 或者将指针变量初始化为nullptr 一 异常错误 error C4703 span class token operator span 对一个潜在的未初始化的
  • VS2019 高级保存设置UTF-8编码-源代码乱码问题

    目录 一 异常错误二 原因三 解决方法 一 异常错误 发现通过VS2019编译的 c文件 xff0c 在Linux中用shell运行时 xff0c 会出现中文乱码的情况 二 原因 本以为是终端编码格式问题 xff0c 后来发现是最初编译器编
  • Linux 终端编译后运行.c/.cpp文件中文乱码问题

    目录 一 异常错误二 原因三 解决方法1 首先确保源代码编码格式是UTF 82 确保Linux运行语言支持中文 一 异常错误 发现通过VS2019编译的 c文件 xff0c 在Linux中用shell运行时 xff0c 终端会出现中文乱码的
  • 「MySQL」从零到删库

    目录 零 数据库的产生 什么是数据库 database抛出问题 xff0c 数据库的产生数据库萌芽阶段的发展历程CRUD层次模型网状模型关系型数据库企业和我们都选什么数据库呢 xff1f 详见 xff1a 零 数据库的产生 一 安装 连接以
  • 用python合并pdf,并添加书签

    之前得到了很多文章的pdf xff0c 现在需要把它们合到一个pdf文件中 使用python库pypdf2可以实现这个功能 首先要安装 pip install pypdf2 然后运行下面的示例 python mergePDF py merg
  • 0:数据库的产生-MySQL

    目录 0 1 什么是数据库 database0 2 抛出问题 xff0c 数据库的产生0 3 数据库萌芽阶段的发展历程0 4 CRUD0 5 层次模型0 6 网状模型0 7 关系型数据库0 8 企业和我们都选什么数据库呢 xff1f 0 1
  • 1:安装、连接以及配置-MySQL

    目录 1 1 windows两种安装方式 xff0c 入门选手推荐第二种 win10演示 1 2 更改终端 xff0c 放弃cmd作为主要终端 xff0c 使用一流终端1 3 MYSQL服务的启动与停止1 4 连接mysql1 5 初始化d
  • 2:数据库的基本操作-MySQL

    目录 2 1 数据库的显示讲解2 2 创建数据库1 创建数据库2 创建带有关键字的数据库 xff08 不推荐 xff09 3 判断并创建一个不知道是否存在的数据库 2 3 删除数据库1 删除数据库2 如果存在则删除数据库 2 4 查看创建的
  • 3:表的基本操作-MySQL

    目录 3 1 提出问题 xff0c 引入 表 的概念与思维模式 table3 2 引用数据库和查看数据库中的表1 引用数据库2 查看数据库中的表 3 3 创建表3 4 创建表 xff08 企业用 xff0c 有B格 xff09 3 5 查看
  • 4:数据操作-MySQL

    目录 4 1 插入数据1 插入数据2 数据的自动添加 xff1a NULL3 default的使用4 省略自增 4 2 一次性插入多条数据4 3 删除数据1 删除2 条件删除 4 4 清空表1 删表跑路2 删节跑路 4 5 小细节 xff0
  • 5:数据类型-MySQL

    目录 5 1 数据库的数据类型问题5 2 int数值类型5 3 int类型实际操作和注意事项5 4 浮点数类型5 5 定点数类型5 6 字符串与文本类型5 7 布尔类型5 8 枚举类型5 9 枚举类型的另类存储方式5 10 枚举类型的好处