当前位置: 首页 > news >正文

mysql学习【第4篇】:数据库之数据类型

首先补充点了解的小知识;

select * from mysql.user  #显示出来乱了
select * from mysql.user\G  #加了\G后一行一行显示了

一、数据类型:分不同种类去存不同类型的数据

存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的

1、数字(默认是有符号的)

数字又分为:

  整型:tinyint(小整型):一个字节

     int(整型):四个字节。注意:int的 宽度指的是显示的宽度,与存储无关

     bigint(大整形):八个字节

复制代码
========================================
        tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
            有符号: -128 ~ 127
            无符号:0~ 255

            PS: MySQL中无布尔值,使用tinyint(1)构造。

 [unsigned]参数和[zerofill]参数的应用
3.将有符号的修改为无符号的:alter table t1 modify unsigned;(注意,如果里面有值了,
                                  得把里面的值清空了再修改)
4.alter table t2 modify id int(10) zerofill; 如果显示不够,就用zerofill填充




======================================== int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围: 有符号: -2147483648 ~ 2147483647 无符号:0~ 4294967295 ======================================== bigint[(m)][unsigned][zerofill] 大整数,数据类型用于保存一些范围的整数数值范围: 有符号:-9223372036854775808 ~ 9223372036854775807 无符号: 0~ 18446744073709551615
复制代码

 

  小数:

     float:在位数比较短的情况下不精准(**** 数值越大,越不准确 ****)

     double:在位数比较长的情况下不精准(**** 数值越大,越不准确 ****)

     decimal:如果是小数,则推荐使用decimal

           因为精准,内部原理是以字符串的形式去存

  

复制代码
 1 先创建一个数据库:create datdabase test;
 2 -----------验证1:int,tinyint,bigint----
 3 create table t1(id tinyint);
 4 create table t1(id int);
 5 create table t1(id bigint);  #如果数字比较大的时候就用bigint
 6 1.如果没有指定符号。默认的是有符号的
 7 2.insert into t1(-129) #就会报错了,因为范围是-128~127
 8 3.将有符号的修改为无符号的:alter table t1 modify unsigned;(注意,如果里面有值了,得把里面的值清空了再修改)
 9 4.alter table t2 modify id int(10) zerofill; 如果显示不够,就用zerofill填充 10 5.宽度:跟存的没有关系,指的是显示的宽度 11 12 13 ----------验证2:float,double------ 14 create table t3(salary float(5,2)) #5代表salary总共多宽,2代表小数点后保留2位,那么整数部分有3位 15 insert into t3 values(3.725454); 16 insert into t3 values(-3.725454); 17 insert into t3 values(1111.725454); #像这个就会报错了 18 insert into t3 values(111.725454); 19 20 bit类型了解就好了 21 bit类型:代表二进制的类型 22 ----------验证3:bit-------- 23 create table t3(x bit); 24 insert into t3 values(0),(1); 25 insert into t3 values(0),(2)); #只能存二进制的,这样的话就会报错 26 select * from t3;
复制代码
  

最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok

2、字符、

char:简单粗暴,不够就用空格凑够固定长度存放起来,浪费空间,但是存储速度快
(牺牲空间,提高速度)
varchar(你有几个就存几个):精准,计算出待存放数据的长度,节省空间,存取速度慢
(牺牲速度,提高效率)
复制代码

  1.-----------------

  create table t6(name char(4));
  insert into t6 values('alexsb');
  insert into t6 values('欧德博爱');
  insert into abc values('艾利克斯a');


2.-------------
create table t7(x char(5),y varchar(5)); insert into t7 values('sff','aaaaa'); select char_length(x),char_length(y) from t7; 查看字符长度 set sql_mode='pad_char_to_full_length'; #打回原形 insert into t7 values('你好啊','好好好!');#utf-8里面一个汉字代表三个字节,那'你好啊'就代表九个,
                          #加上两个空格就是11个字节 select length(x),length(y) from t7; 查看字节长度
复制代码

  查看字符的长度

 

查看字节的长度

3、日期

作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等

有下面几种类型:

datatime:2017-09-06 10:30:22
data:2017-09-06
time:10:30:22
year:2017
timeatamp:和datatime是一样的,就是支持的范围datatime的大

复制代码
---------------验证4:日期类型-------
create table stu(
id int,
name char(5),
born_data date,
born_year year,
reg_time datetime,
class_time time
);

insert into stu values(1,'ao',now(),now(),now(),now());
insert into stu values(1,'xiao','2017-09-06','2017','2017-09-06 10:39:00','08:30:00');

#了解
insert into stu values(1,'alex','2017-09-06',2017,'2017-09-06 10:39:00','08:30:00');
insert into stu values(1,'alex','2017/09/06',2017,'2017-09-06 10:39:00','08:30:00'); 没有-的可以不用加引号 insert into stu values(1,'alex','20170906',2017,'20170906103900','083000'); 也可以吧符号取了连写



============注意啦,注意啦,注意啦===========
1. 单独插入时间时,需要以字符串的形式,按照对应的格式插入
2. 插入年份时,尽量使用4位值
3. 插入两位年份时,<=69,以20开头,比如50,  结果2050      
                >=70,以19开头,比如71,结果1971
MariaDB [db1]> create table t12(y year);
MariaDB [db1]> insert into t12 values  
    -> (50),
    -> (71);
MariaDB [db1]> select * from t12;
+------+
| y    |
+------+
| 2050 |
| 1971 |
+------+
复制代码
复制代码
1 在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。
2 
3 1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
4 
5 2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
6 
7 3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
8 
9 4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
复制代码

4、枚举与集合

字段的值只能在给定范围中选择,如单选框,多选框

enum枚举:规定一个范围:这个范围可以有多个,但是为该字段传值时,只能取规定范围内的其中一个
set集合:规定一个范围:这个范围可以有多个,但是为该字段传值时,可以取规定范围内的一个或多个
enum如果你不传值,默认是第一个值,或者为NUll

复制代码
----------枚举和集合-----------
create table stu1(
id int primary key auto_increment,
name char(5),
sex enum('male','female'), #enum 代表枚举类型
hobbies set('eat','play','study','coding') #set 代表集合类型
);
insert into stu1(name,sex,hobbies) values('haiyan','none','dsfdg');
select * from stu1;  #如果设置了sex是枚举类型,就的从设定的里面选其中的一个存
insert into stu1(name,sex,hobbies) values('haiyan','female','play,study');
select * from stu1;  #如果设置了hobbies是集合类型,就得从设定的里面选其中一个或者多个值来存
复制代码

没有按照枚举或集合规定的传值的结果

按照枚举或集合的规定传值的结果

 

 

转载于:https://www.cnblogs.com/kcwxx/p/10145464.html

相关文章:

  • python字典操作总结
  • hadoop Hive(9)
  • 启动和测试oracle是否安装成功
  • Java初始化顺序
  • linux 生成随机密码
  • 线程创建
  • 测者的测试技术手册:智能化测试框架EvoSuite的一个坑以及填坑方法
  • cookie和session
  • Android EditText控件自动转换大小写,光标位置不跳位
  • Android aidl Binder框架浅析
  • 4.8_获取页面元素的内容_getTable
  • java框架学习日志-10(自定义类实现AOP)
  • 说一说飞机上的无线上网
  • C#中的线程池使用(一)
  • android实现图片识别的几种方法
  • Java 多线程编程之:notify 和 wait 用法
  • Java,console输出实时的转向GUI textbox
  • js ES6 求数组的交集,并集,还有差集
  • Python socket服务器端、客户端传送信息
  • Redis字符串类型内部编码剖析
  • vue自定义指令实现v-tap插件
  • 成为一名优秀的Developer的书单
  • 前端自动化解决方案
  • 如何进阶一名有竞争力的程序员?
  • 说说动画卡顿的解决方案
  • scrapy中间件源码分析及常用中间件大全
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​批处理文件中的errorlevel用法
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (07)Hive——窗口函数详解
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)springcloud实战之config配置中心
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计高校学生选课系统
  • (剑指Offer)面试题34:丑数
  • (九)One-Wire总线-DS18B20
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (强烈推荐)移动端音视频从零到上手(上)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)为C# Windows服务添加安装程序
  • .aanva
  • .bat文件调用java类的main方法
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET与 java通用的3DES加密解密方法
  • @Pointcut 使用
  • @Responsebody与@RequestBody
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [BJDCTF 2020]easy_md5
  • [BZOJ1008][HNOI2008]越狱
  • [CC-FNCS]Chef and Churu