首页 > 数据库 >5:数据类型-MySQL

5:数据类型-MySQL

时间:2022-12-16 10:38:44浏览次数:53  
标签:set affected 0.00 MySQL 数据类型 sec mysql row

(目录)

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)

标签:set,affected,0.00,MySQL,数据类型,sec,mysql,row
From: https://blog.51cto.com/yeatsliao/5946862

相关文章

  • MySQL技术内幕—第一章 体系结构和存储引擎
    MySQL被设计为一个单进程多线程架构的数据库,数据库实例在系统上的表现就是一个进程。当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。而......
  • 基于Java+Swing+mysql图书管理系统
    @目录一、系统介绍二、功能展示1.用户登陆2.系统主页3.图书查询4.图书添加5.图书修改6.图书删除7.办理借书8.办理还书9.历史查询10.用户查询、删除(管理员)三、数据库四、其......
  • 基于Java+Swing+mysql图书管理系统 (1)
    @目录一、系统介绍二、功能展示1.用户登陆2.图书管理3.图书添加4.图书类别管理5.图书类别添加三、数据库四、其它1.其他系统实现五、获取源码一、系统介绍程序中实现了登......
  • Java+Swing+mysql员工工资管理系统
    @目录一、系统介绍二、功能展示1.主页2.员工工资查询3.员工工资添加4.员工工资修改5.员工工资删除三、系统实现1.salary.java四、其它1.其他系统实现五、获取源码一、系统......
  • MySQL kill进程后出现killed
    一.问题描述拷贝一个大表的表数据的时候,等待时间太久,就在前台通过CTRL+C的方式停掉了   通过showprocesslist查找到对应的进程,然后进行kill,结果kill完了,依旧在进......
  • ssm报错Could not open JDBC Connection for transaction; nested exception is com.m
    HTTPStatus500-Requestprocessingfailed;nestedexceptionisorg.springframework.transaction.CannotCreateTransactionException:CouldnotopenJDBCConnecti......
  • mysql安装系统错误
    一.看到一篇博客解决二.替换掉增加文件2.1替换位置2.2分享链接链接:https://pan.baidu.com/s/1tig9d7-_HCMYcrIz2SYQpg?pwd=8zzp提取码:8zzp......
  • 任务174:1-MySQL执行过程分析_ev
        mysql错误日志目录   ......
  • MySQL
    MySQL序列使用MySQL序列是一组整数:1,2,3,...,由于一张数据表只能有一个字段自增主键,如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。本章我们将介绍......
  • 高手必备10大难题:Mysql如何实现RR级隔离时,不会幻读?
    文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面......